如何在Java中编写表达式的解释

时间:2015-12-31 15:19:14

标签: java expression

所以这是我的代码的一部分:

if (file.toString().??? && file.toString().endsWith(FilterCommand.afterDot)) {
            System.out.println(file.toAbsolutePath());

用户将输入字符串,类似于此(somet ext.txt只是一个输入的示例,用户将输入几次,每次它可以是不同的东西):somet ext.txt我的工作是找到与给定表达式匹配的所有文件。在这个例子中,它可能是这样的:

sometext.txt
sometHhBkJnKext.txt
sometANYTHINGCANBEHEREext.txt

所以"某些"和" ext.txt"保持不变。他们之间可以有任何东西。我是指0个或更多字符。我们还可以假设用户永远不会输入两个*。它总是一个*,它可以在前面,中间或最后。

我能够在dot之前将字符串上的给定字符串分开(somet * ext,我将其保存在变量FilterCommand.beforeDot中)和点之后(txt,我将其保存在变量FilterCommand.afterDot中)。所以,如果我需要询问点后的文本是否相同(我使用:file.toString().endsWith(FilterCommand.afterDot)并且如果点之前的文本匹配给定表达式。我该怎么做?

4 个答案:

答案 0 :(得分:2)

所以我认为你可以做这样的事情 -

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


}

答案 1 :(得分:1)

您可以这样检查(这也会匹配.txt,因此无需拆分文件名):

public static void main(String[] args) {
    if(Pattern.matches("somet.*ext\\.txt", "somet**HhBkJnK**ext.txt"))
    {
        System.out.println("Yes");
    }
    else
    {
        System.out.println("No");
    }
    if(Pattern.matches("somet.*ext\\.txt", "sometext.txt"))
    {
        System.out.println("Yes");
    }
    else
    {
        System.out.println("No");
    }
    if(Pattern.matches("somet.*ext\\.txt", "some**sdfsdfsdft**ex.txt"))
    {
        System.out.println("Yes");
    }
    else
    {
        System.out.println("No");
    }
}

输出:

  

     

     

没有

请执行此操作以查看您的文件:

if(Pattern.matches("somet.*ext\\.txt", file.toString()))
{
    System.out.println("Yes");
}
else
{
    System.out.println("No");
}

答案 2 :(得分:0)

首先,你需要逃避点,即\。否则正则表达式解析器会将点解释为“查找单个字符,任何字符”。

例如:

Lib.current.stage.addEventListener(openfl.events.KeyboardEvent.KEY_UP, checkKeypress);

...

private function checkKeypress(e:openfl.events.KeyboardEvent):Void
{
    switch (e.keyCode)
    {
        case openfl.ui.Keyboard.ESCAPE:
            e.stopImmediatePropagation();
            restartLevel();
    }
}
private function restartLevel():Void
{
    //your code to restart level here
}

答案 3 :(得分:-1)

我不确定为什么你需要拆分用户在&#39;。&#39;处提供的字符串。看起来你可以写file.toString().matches(userString)来确定该文件是否与提供的模式匹配