【问题标题】:Java regex vs pathJava 正则表达式与路径
【发布时间】:2014-05-09 16:32:27
【问题描述】:

我知道还有其他关于它的问题,但即使有这些,我也无法在我的代码中找到错误。 我写这个是为了检查我的 textField 中写的内容是否是路径,但它似乎不正确。代码如下:

textFieldNewGameUrl.addFocusListener(new FocusAdapter() {   
        @Override
        public void focusLost(FocusEvent arg0) {

            boolean isMatched = (textFieldNewGameUrl.getText()).matches("([a-zA-Z]:)?(\\\\[a-zA-Z0-9_.-]+)+\\\\?");

            if(isMatched){          
                labelNewGameFeedback.setText("Ok, the path is correct");
            }
            else{
                labelNewGameFeedback.setText("Strange things have happened : check the path.");
            }

        }
    });

【问题讨论】:

  • 预期的输入和行为是什么?
  • “不正确”是什么意思?
  • 所以你想检查一个windows路径的正确性。在您看来,仅包含“NUL”的路径是否有效?另见this question / set of answers。换一种说法;试着打开文件看看会发生什么。
  • 不要忘记.matches() 会尝试检查 整个输入 是否与正则表达式匹配,这与它的名称似乎暗示的不同。此外,你的正则表达式很重要,你应该为它创建一个Pattern
  • 对,对不起:我用 JFileChooser 选择了一个目录,我需要查看选择的路径是否具有正确的格式。我可以将 textField 设置为不可编辑,但我不想这样做。此代码的输出始终是“发生了奇怪的事情:检查路径”。因为 isMarched 总是假的。我更改了创建模式的代码,我使用 Pattern.compile(..) 方法和匹配器 m.. 但 m.matches() 仍然是错误的。我更新了问题中的代码

标签: java regex path


【解决方案1】:

编写正则表达式来检查路径非常复杂。

public static void main(String[] args) {
   Pattern pattern = Pattern.compile("([a-zA-Z]:)?(\\\\[a-zA-Z0-9_.-]+)+\\\\?");
   System.out.println(pattern.matcher("D:\\").matches());
   System.out.println(pattern.matcher("D:\\A").matches());
   System.out.println(pattern.matcher("A\\B").matches());
   System.out.println(pattern.matcher("\\A\\B").matches());
}

这将输出

false 
true 
false 
true

您的模式并未完全破坏,但您要求它以反斜杠开头。这不是相对路径所必需的。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2011-11-19
    • 2013-09-09
    相关资源
    最近更新 更多