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