如何用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我相信他只是在显示会有任何c
somet*******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只是一个输入的示例,用户将输入多次,每次都可能有所不同。我编辑了我的原始帖子。