检查string是否以特定模式结束

如果我有像这样的string:

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的string,以find一个字在最后的感激 ,或者/之前。 我怎样才能做到这一点?

这非常简单, String对象有一个endsWith方法。

从你的问题看来,你想要/ ,. 作为分隔符设置。

所以:

 String str = "This.is.a.great.place.to.work."; if (str.endsWith(".work.") || str.endsWith("/work/") || str.endsWith(",work,")) // ... 

你也可以用matches方法和一个相当简单的正则expression式来做到这一点:

 if (str.matches(".*([.,/])work\\1$")) 

使用指定句号,斜线或逗号的字符类[.,/]和反向引用\1来匹配find的交替符号(如果有的话)。

你可以testing一个string是否以一个字符结尾,如下所示:

 theString.matches(".*work.$"); 

如果尾随字符是可选的,你可以使用这个:

 theString.matches(".*work.?$"); 

确保最后一个字符是句号. 或斜线/你可以使用这个:

 theString.matches(".*work[./]$"); 

要testing工作后面跟着一个可选的句点或斜线,你可以使用这个:

 theString.matches(".*work[./]?$"); 

要testing周期斜杠包围工作 ,可以这样做:

 theString.matches(".*[./]work[./]$"); 

如果工作 前后代币 必须相互匹配 ,你可以这样做:

 theString.matches(".*([./])work\\1$"); 

您的具体要求没有精确定义,但我认为这将是这样的:

 theString.matches(".*work[,./]?$"); 

换一种说法:

  • 零个或多个字符
  • 其次是工作
  • 接着是零或一个. OR /
  • 随后是input的结尾

各种正则expression式的解释

 . -- 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" 

这里有一个testing工具来玩:

 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); } } 

当然,您可以使用StringTokenizer类来将string分割为“。” 或'/',并检查最后一个单词是否“工作”。

您可以使用子string方法:

  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); 

你可以使用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的最后一个值是“不可变的”。 那么你可以在控制台中看到真实的。 根据你的问题,

 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"); } } 

}