Соответствие строки ключевого слова с помощью .contains () в Android - PullRequest
0 голосов
/ 17 октября 2018
String a = "Hello my name is Sap";

String b = "HelloisSapmyname";

String c = "Sap is my name";

String d = "Sap";



String keyword = "Sap";

когда я использую .contains(), это верно для всех строк.

Как это сделать для всех случаев, кроме b?

Примечание: Добавление пробела перед ключевым словомне будет работать, если ключевое слово, если первое слово.Пожалуйста, помогите!

РЕДАКТИРОВАТЬ : добавлены все возможные условия

РЕШЕНИЕ : с помощью других ответов я нашел решение, которое удовлетворяет всем условиям

if (a.contains(" "+key+ " ") || a.startsWith(key+" ") 
    || a.equals(key) || a.endsWith(" "+key))

Будет ли регулярное выражение быстрее этого?

Ответы [ 5 ]

0 голосов
/ 17 октября 2018

". Содержит ()" должно работать.

String a = "Hello my name is Sap";
String b = "HelloisSamynamep";
String c = "Sap is my name";
String d = "Sap";
String keyword = "Sap";

System.out.println(a.contains(keyword));
System.out.println(b.contains(keyword));
System.out.println(c.contains(keyword));
System.out.println(d.contains(keyword));

Output -

true
false
true
true

Если я не ошибаюсь, ".contains ()" использует регулярное выражение для внутреннего использования.

0 голосов
/ 17 октября 2018

Вы можете просто использовать Regex.\ b использовать для ограничения слова.

Pattern p = Pattern.compile("\\bSap\\b");

String a ="Hello my name is Sap";
Matcher m1 = p.matcher(a);
System.out.println( m1.find());// return true

String b = "HellomynameisSap";
Matcher m2=p.matcher(b);
System.out.println( m2.find());//return false

String c = "Hello Sap my name";
Matcher m3=p.matcher(c);
System.out.println( m3.find());//return true

String d = "Sap";
Matcher m4=p.matcher(d);
System.out.println( m4.find());//return true

По умолчанию учитывается регистр.если вам нужна нечувствительность к регистру, вы должны инициализировать Pattern следующим образом.

Pattern p = Pattern.compile("\\bsap\\b",Pattern.CASE_INSENSITIVE);
0 голосов
/ 17 октября 2018

Попробуйте это:

if(a.contains(" "+key+" ") || a.startsWith(key) || a.endsWith(key))
0 голосов
/ 17 октября 2018

Просто попробуйте следующее

if(Str.startsWith("Sap ") ||  Str.contains(" Sap")){
    <code>
}
0 голосов
/ 17 октября 2018

Вы можете разделить ввод String на слова, преобразовать его в List и запустить contains на List:

Arrays.asList("Hello my name is Sap".split(" ")).contains("Sap")
...