如何用Java编写表达式的解释
下面是我代码的一部分:如何用Java编写表达式的解释,java,expression,Java,Expression,下面是我代码的一部分: if (file.toString().??? && file.toString().endsWith(FilterCommand.afterDot)) { System.out.println(file.toAbsolutePath()); 用户将输入字符串,类似这样的内容(sometext.txt只是一个输入的示例,用户将输入多次,每次都可能有所不同):sometext.txt,我的工作是查找与给定表达式匹配的所有文件。在本例
if (file.toString().??? && file.toString().endsWith(FilterCommand.afterDot)) {
System.out.println(file.toAbsolutePath());
用户将输入字符串,类似这样的内容(sometext.txt只是一个输入的示例,用户将输入多次,每次都可能有所不同):sometext.txt,我的工作是查找与给定表达式匹配的所有文件。在本例中,可能是这样的:
sometext.txt
sometHhBkJnKext.txt
sometANYTHINGCANBEHEREext.txt
所以“somet”和“ext.txt”保持不变。在他们之间,任何东西都可能存在。我的意思是0个或更多字符。我们还可以假设用户永远不会输入两个*。它总是一个*,它可以在前面,在中间或在最后。
我能够在点之前的字符串(somet*ext,我将其保存在变量
FilterCommand.beforeDot
)和点之后的字符串(txt,我将其保存在变量FilterCommand.afterDot
)中分离给定字符串。因此,如果我需要询问点后的文本是否相同(我使用:file.toString().endsWith(FilterCommand.afterDot)
,以及点前的文本是否与给定的表达式匹配。我该怎么做?您可以这样检查它(这也将与.txt
匹配,因此无需拆分文件名):
输出:
对
对
没有
只需执行以下操作即可检查您的文件:
if(Pattern.matches("somet.*ext\\.txt", file.toString()))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
您可以这样检查它(这也将匹配
.txt
,因此无需拆分文件名):
输出:
对
对
没有
只需执行以下操作即可检查您的文件:
if(Pattern.matches("somet.*ext\\.txt", file.toString()))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
我不确定为什么需要拆分用户在“.”处提供的字符串。似乎您可以只编写
file.toString().matches(userString)
要确定该文件是否与提供的模式匹配我不确定为什么需要拆分用户在“.”处提供的字符串。您似乎可以只编写file.toString().matches(userString)
要确定该文件是否与提供的模式匹配,首先需要转义点,即\。否则正则表达式解析器将把点解释为“查找单个字符,任意字符”
例如:
public static void main(String args[]) {
String regexFilePattern = "[[a-zA-Z0-9]+]\\.[[a-zA-Z0-9]+]";
Matcher matcher = null;
for(int i = 0; i < args.length; i++) {
matcher = Pattern.compile(regexFilePattern).matcher(args[i]);
while (matcher.find()) {
if (matcher.start() > 0) {
//there is a match!
//manipulate the result here when the text after the dot
//matches the text before the dot
}
}
}
}
publicstaticvoidmain(字符串参数[]){
字符串regexFilePattern=“[[a-zA-Z0-9]+]\\.[a-zA-Z0-9]+]”;
Matcher-Matcher=null;
对于(int i=0;i0){
//有一根火柴!
//当文本位于点之后时,在此处操纵结果
//匹配点之前的文本
}
}
}
}
首先,您需要转义点,即\。否则,正则表达式解析器会将点解释为“查找单个字符,任意字符”
例如:
public static void main(String args[]) {
String regexFilePattern = "[[a-zA-Z0-9]+]\\.[[a-zA-Z0-9]+]";
Matcher matcher = null;
for(int i = 0; i < args.length; i++) {
matcher = Pattern.compile(regexFilePattern).matcher(args[i]);
while (matcher.find()) {
if (matcher.start() > 0) {
//there is a match!
//manipulate the result here when the text after the dot
//matches the text before the dot
}
}
}
}
publicstaticvoidmain(字符串参数[]){
字符串regexFilePattern=“[[a-zA-Z0-9]+]\\.[a-zA-Z0-9]+]”;
Matcher-Matcher=null;
对于(int i=0;i0){
//有一根火柴!
//当文本位于点之后时,在此处操纵结果
//匹配点之前的文本
}
}
}
}
所以我想你可以这样做-
if(file.toString().matches("somet.*ext\\.txt")){
System.out.println(file.toAbsolutePath());
}
else{
System.out.println("Not matching");
}
所以我想你可以这样做-
if(file.toString().matches("somet.*ext\\.txt")){
System.out.println(file.toAbsolutePath());
}
else{
System.out.println("Not matching");
}
很抱歉,我没有很好地表达自己。*代表零个或多个字母。例如*可以表示:fgdKSS、DDS或fff。大写或小写都不重要。
**
是什么意思?用户永远不会输入类似的内容,所以我们可以忽略该大小写。@T.J.Crowder我相信他只是在显示会有任何csomet*******ext
之间的字符更容易通过***
将其与文本的其余部分分离,因此“somet”和“ext.txt”保持不变?在它们之间可以有任何内容。我的意思是0个或更多字符,对吗?我很抱歉,我没有很好地表达自己。*表示零个或多个字母。例如*可以表示:fgdKSS、DDS或fff。大写或小写都不重要。**
意味着什么?用户永远不会输入类似的内容t所以我们可以忽略这个例子。@t.J.Crowder我相信他只是在展示somet*******ext
之间会有任何字符,只是通过***
将其与文本的其余部分分离,更容易直观地看到。所以“somet”和“ext.txt”在它们之间,任何东西都可以存在。我指的是0个或更多个字符。在字符串中,用户输入的字符串只能是一个*,它可以在字符串的开头、中间或结尾的某个地方。我编辑了我的POST。如果是这样的话,那么将下面的内容添加到正则表达式中,以便看起来如下:SMOET。[a-zA-Z0-9]+]Ext.txtSOMTE*Ex.txt只是一个输入的例子,用户将输入几次,每次它可以是不同的。我编辑了我的原始帖子。在字符串中,用户输入只能有一个*,它可以在字符串的开头,在中间或结尾的某个地方。我编辑了我的POST。如果是这样的话,然后添加下面的内容。正则表达式,使其看起来如下:somet[[a-zA-Z0-9]+]ext.txtsomet*ext.txt只是一个输入的示例,用户将输入多次,每次都可能有所不同。我编辑了我的原始帖子。