Я проверяю, доступен ли "из" в предложении или нет. Я пытаюсь выполнить проверку строки java. страница - это строковая переменная, и код здесь
page="Paint, Body & Trim : Body : Moldings : Sunroof";
if(page.contains("of"))
{
}
else
{
}
проблема в приведенном выше примере люка крыши имеет "из", поэтому петля дает истину. но я не хочу, чтобы слова с "из" были приняты. пожалуйста, помогите мне с этим.
Вы можете использовать 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
Просто измените это
if(page.contains("of"))
в
if(page.contains(" of "))
EDIT: просто подумайте, начинается ли предложение или заканчивается "из":
if(page.contains(" of ") || page.startsWith("of ") || page.endsWith(" of"))
Вы можете сделать это таким образом. используйте equals()
вместо contains()
String page="Paint, Body & Trim : Body : Moldings : Sunroof";
for (String i:page.split(" ")){
if("of".equals(i)){
}
}
Лучший способ сделать это - использовать регулярное выражение:
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
Соответствие "из" (с пробелами до и после) не будет работать в случаях, когда "из" находится в начале, в конце, перед пунктуацией,...
Попробуйте, if(page.contains(" of "))
таким образом он будет принимать слово "из", а не строки с этой подстрокой.
Добавьте пробелы до и после строки поиска, т.е.
if(page.contains(" of ")){
}
Другой способ - расщепление предложения с помощью пространственного разделителя, но здесь вам нужно зациклить массив строк.
Вы могли бы сделать
if (page.matches(".*\\bof\\b.*")) {
Вам нужно использовать regex здесь, это упростило бы еще вам, чтобы добавить много проверок:
System.out.println(str.matches(".*\\bof\\b.*")); //will return true
Вот демонстрация
или по-другому, если вы просто выглядите целым словом:
String page="Paint, Body & Trim : Body : Moldings : Sunroof";
StringTokenizer st2 = new StringTokenizer(str, " ");//space
while (st2.hasMoreElements()) {
if((st2.nextElement().equals("of")){
//whatever..
}
}