Проверка строки Java

1

Я проверяю, доступен ли "из" в предложении или нет. Я пытаюсь выполнить проверку строки java. страница - это строковая переменная, и код здесь

page="Paint, Body & Trim : Body : Moldings : Sunroof";



if(page.contains("of"))
{
}
else
{
}

проблема в приведенном выше примере люка крыши имеет "из", поэтому петля дает истину. но я не хочу, чтобы слова с "из" были приняты. пожалуйста, помогите мне с этим.

Теги:
string
if-statement

9 ответов

1
Лучший ответ

Вы можете использовать Scanner с разделителем ": ":

String page="Paint, Body & Trim : Body : Moldings : Sunroof";

boolean contains(Scanner scan, word){
    scan.useDelimiter(" : ");
    while(in.hasNext())
        if(in.next().equals(word) return true;
    return false;
}

а затем сделайте вызов, подобный этому System.out.println(contains(new Scanner(page), "of");

Это напечатать false

4

Просто измените это

if(page.contains("of"))

в

if(page.contains(" of "))

EDIT: просто подумайте, начинается ли предложение или заканчивается "из":

if(page.contains(" of ") || page.startsWith("of ") || page.endsWith(" of"))
  • 4
    это потерпит неудачу, если "of" находится в начале строки, т.е. нет строки в начале.
  • 0
    @ZaheerAhmed отредактировано согласно вашим комментариям, спасибо!
Показать ещё 3 комментария
3

Вы можете сделать это таким образом. используйте equals() вместо contains()

String page="Paint, Body & Trim : Body : Moldings : Sunroof";
  for (String i:page.split(" ")){
        if("of".equals(i)){

        }
    }
1

Лучший способ сделать это - использовать регулярное выражение:

page.matches(".*\\b[Oo][Ff]\\b.*")

.* означает "любой символ нуля или более раз". \\b - граница слова. [Oo] означает символ "O", верхний регистр или строчный регистр.

Вот несколько тестовых примеров:

String page = "Paint, Body & Trim : Body : Moldings : Sunroof";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // false
page = "A piece of cake";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // true
page = "What I'm made of";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // true
page = "What I'm made of.";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // true
page = "What I'm made of, flesh";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // true
page = "Of the Night";
System.out.println(page.matches(".*\\b[Oo][Ff]\\b.*")); // true

Соответствие "из" (с пробелами до и после) не будет работать в случаях, когда "из" находится в начале, в конце, перед пунктуацией,...

1

Попробуйте, if(page.contains(" of ")) таким образом он будет принимать слово "из", а не строки с этой подстрокой.

0

Добавьте пробелы до и после строки поиска, т.е.

if(page.contains(" of ")){
}

Другой способ - расщепление предложения с помощью пространственного разделителя, но здесь вам нужно зациклить массив строк.

0

Вы могли бы сделать

if (page.matches(".*\\bof\\b.*")) {
0

Вам нужно использовать regex здесь, это упростило бы еще вам, чтобы добавить много проверок:

System.out.println(str.matches(".*\\bof\\b.*"));   //will return true

Вот демонстрация

0

или по-другому, если вы просто выглядите целым словом:

String page="Paint, Body & Trim : Body : Moldings : Sunroof";
StringTokenizer st2 = new StringTokenizer(str, " ");//space

        while (st2.hasMoreElements()) {
            if((st2.nextElement().equals("of")){
              //whatever..
             }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню