Проверьте, заканчивается ли строка с определенным шаблоном
Если у меня есть строка вроде:
This.is.a.great.place.too.work.
или
This/is/a/great/place/too/work/
чем моя программа должна дать мне, что предложение действительно, и оно имеет "работу".
Если у меня:
This.is.a.great.place.too.work.hahahha
или
This/is/a/great/place/too/work/hahahah
то моя программа не должна давать мне, что в предложении есть "работа".
Итак, я смотрю на строки java, чтобы найти слово в конце сообщения, имеющего., или, или/перед ним. Как я могу это достичь?
Ответы
Ответ 1
Это действительно просто, String
объект имеет endsWith
метод.
Из вашего вопроса кажется, что вы хотите либо /
, ,
, либо .
как набор разделителей.
Итак:
String str = "This.is.a.great.place.to.work.";
if (str.endsWith(".work.") || str.endsWith("/work/") || str.endsWith(",work,"))
// ...
Вы также можете сделать это с помощью метода matches
и довольно простого регулярного выражения:
if (str.matches(".*([.,/])work\\1$"))
Используя класс символов [.,/]
, определяющий либо период, либо косую черту, либо запятую, и обратную ссылку, \1
, которая соответствует тому, что из альтернатив было найдено, если оно есть.
Ответ 2
Вы можете проверить, заканчивается ли строка с работой, за которой следует один символ:
theString.matches(".*work.$");
Если конечный символ необязательный, вы можете использовать это:
theString.matches(".*work.?$");
Чтобы последний символ был периодом .
или косой чертой /
, вы можете использовать это:
theString.matches(".*work[./]$");
Чтобы проверить работу, за которой следует необязательный период или слэш, вы можете использовать это:
theString.matches(".*work[./]?$");
Чтобы проверить работу в окружении по периодам или, вы можете сделать это:
theString.matches(".*[./]work[./]$");
Если токены до и после работают должны соответствовать друг другу, вы можете сделать это:
theString.matches(".*([./])work\\1$");
Ваше точное требование точно не определено, но я думаю, что это будет примерно так:
theString.matches(".*work[,./]?$");
Другими словами:
- ноль или более символов
- а затем работа
- за которым следует ноль или один
,
.
ИЛИ /
- за которым следует конец ввода
Объяснение различных элементов регулярного выражения:
. -- any character
* -- zero or more of the preceeding expression
$ -- the end of the line/input
? -- zero or one of the preceeding expression
[./,] -- either a period or a slash or a comma
[abc] -- matches a, b, or c
[abc]* -- zero or more of (a, b, or c)
[abc]? -- zero or one of (a, b, or c)
enclosing a pattern in parentheses is called "grouping"
([abc])blah\\1 -- a, b, or c followed by blah followed by "the first group"
Здесь тестовый жгут для игры:
class TestStuff {
public static void main (String[] args) {
String[] testStrings = {
"work.",
"work-",
"workp",
"/foo/work.",
"/bar/work",
"baz/work.",
"baz.funk.work.",
"funk.work",
"jazz/junk/foo/work.",
"funk/punk/work/",
"/funk/foo/bar/work",
"/funk/foo/bar/work/",
".funk.foo.bar.work.",
".funk.foo.bar.work",
"goo/balls/work/",
"goo/balls/work/funk"
};
for (String t : testStrings) {
print("word: " + t + " ---> " + matchesIt(t));
}
}
public static boolean matchesIt(String s) {
return s.matches(".*([./,])work\\1?$");
}
public static void print(Object o) {
String s = (o == null) ? "null" : o.toString();
System.out.println(o);
}
}
Ответ 3
Конечно, вы можете использовать класс StringTokenizer
, чтобы разделить String на '.' или '/', и проверьте, работает ли последнее слово.
Ответ 4
Вы можете использовать метод подстроки:
String aString = "This.is.a.great.place.too.work.";
String aSubstring = "work";
String endString = aString.substring(aString.length() -
(aSubstring.length() + 1),aString.length() - 1);
if ( endString.equals(aSubstring) )
System.out.println("Equal " + aString + " " + aSubstring);
else
System.out.println("NOT equal " + aString + " " + aSubstring);
Ответ 5
Вы можете использовать endsWith, чтобы решить эту проблему.
Прежде всего, мы попробуем простой пример с помощью метода endswith
public class Test {
public static void main(String args[]) {
String Str = new String("This is really not immutable");
retVal = Str.endsWith( "immutable" );
System.out.println("Returned Value = " + retVal );
}
}
Последнее значение Str является "неизменным". Затем вы можете увидеть true в консоли.
Согласно вашему вопросу,
public class Test {
public static void main(String args[]) {
String Str = new String("This/is/a/great/place/too/work/hahahah");
boolean retVal;
retVal = Str.endsWith( "work/hahahah" );
System.out.println("Returned Value = " + retVal );
if(retVal == true){
System.out.println("Its work");
}
}
}