Java 检查字符串是否以特定模式结束
如果我有一个字符串,比如:Java 检查字符串是否以特定模式结束,java,regex,string,pattern-matching,Java,Regex,String,Pattern Matching,如果我有一个字符串,比如: This.is.a.great.place.too.work. 或: 比我的程序应该给我的句子是有效的,它有“工作” 如果我有: This.is.a.great.place.too.work.hahahha 或: 那么我的程序不应该给我在句子中有一个“工作” 因此,我正在查看java字符串,以便在句子末尾找到一个单词,前面有或,或/。我怎样才能做到这一点 这非常简单,对象有一个方法 从您的问题来看,您似乎希望将/、、或作为分隔符集 因此: 您还可以使用该方法和
This.is.a.great.place.too.work.
或:
比我的程序应该给我的句子是有效的,它有“工作”
如果我有:
This.is.a.great.place.too.work.hahahha
或:
那么我的程序不应该给我在句子中有一个“工作”
因此,我正在查看java字符串,以便在句子末尾找到一个单词,前面有
或,
或/
。我怎样才能做到这一点 这非常简单,对象有一个方法
从您的问题来看,您似乎希望将/
、、
或
作为分隔符集
因此:
您还可以使用该方法和一个相当简单的正则表达式:
if (str.matches(".*([.,/])work\\1$"))
使用字符类
[,/]
指定句点、斜杠或逗号以及反向引用,\1
匹配找到的任何替代项(如果有的话)。当然,您可以使用该类将字符串拆分为“.”或“/”,并检查最后一个单词是否为“work”.您可以测试字符串是否以work结尾,后跟一个字符,如下所示:
theString.matches(".*work.$");
theString.matches(".*work[,./]?$");
如果尾随字符是可选的,可以使用:
theString.matches(".*work.?$");
theString.matches(".*work[./]$");
theString.matches(".*work[./]?$");
要确保最后一个字符是句点
或斜杠/
,可以使用以下命令:
theString.matches(".*work.?$");
theString.matches(".*work[./]$");
theString.matches(".*work[./]?$");
要测试紧跟着可选的句点或斜杠的工时,可以使用以下命令:
theString.matches(".*work.?$");
theString.matches(".*work[./]$");
theString.matches(".*work[./]?$");
要测试被句点或斜杠包围的工作,可以执行以下操作:
theString.matches(".*[./]work[./]$");
theString.matches(".*([./])work\\1$");
如果工作前后的标记必须相互匹配,则可以执行以下操作:
theString.matches(".*[./]work[./]$");
theString.matches(".*([./])work\\1$");
您的确切需求没有精确定义,但我认为应该是这样的:
theString.matches(".*work.$");
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);
}
}
可以使用子字符串方法:
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);
我尝试了这里提到的所有不同的方法来获取以
[0-9][0-9]*
结尾的文件名中
字符的索引,例如srcfile.1
,srcfile.12
等。没有任何效果。最后,以下措施奏效了:
int dotIndex=inputfilename.lastIndexOf(“.”)代码>
奇怪!这是java版本:
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.10.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
另外,regex
的官方Java文档页面(上面的一个答案中有一个引号)似乎没有指定如何查找
字符。因为\.
,\.
和[.]
对我不起作用,我看不到除了这些选项之外还指定了任何其他选项。似乎这两个答案都没有像OP指定的那样在结尾处多出一个字符。谢谢pb2q,它回答了我的问题,因为我不知道结尾字符是什么(我的问题是最后只有字符(,/$)或者可能没有,但不会有单词。所以在java中,你能解释一下1$@TheLearner是什么吗?正则表达式末尾有两个独立的东西:第一个是\1
,它是一个反向引用,指的是字符集[,./]中匹配的任何字符。)在前面的正则表达式中,我们用paren将该集合分组为可引用:([,./])
。而$
只是表示行尾。下面有一些很好的答案,@Learner;您应该选择一个并将其标记为答案。在正则表达式中显示“\\”如果你正在寻找点字符,那么我就从java字符串的非均匀API中产生了困难:对于从文件名字符串中定位/提取版本号的任务,我将考虑String方法。,最后是.matches。结果表明,每种类型都采用不同的参数类型,因此可能会产生混淆:.endsWith(String)、.contains(CharSequence)和.matches(regex)!这非常有帮助,感谢您提供的信息性响应。提供一些代码解释正则表达式将确保输入字符串以“work”结尾后跟一个字符,最后一个字符应该是允许的三个字符之一(逗号、句点或正斜杠)。
String input1 = "This.is.a.great.place.too.work.";
String input2 = "This/is/a/great/place/too/work/";
String input3 = "This,is,a,great,place,too,work,";
String input4 = "This.is.a.great.place.too.work.hahahah";
String input5 = "This/is/a/great/place/too/work/hahaha";
String input6 = "This,is,a,great,place,too,work,hahahha";
String regEx = ".*work[.,/]";
System.out.println(input1.matches(regEx)); // true
System.out.println(input2.matches(regEx)); // true
System.out.println(input3.matches(regEx)); // true
System.out.println(input4.matches(regEx)); // false
System.out.println(input5.matches(regEx)); // false
System.out.println(input6.matches(regEx)); // false