【问题标题】:Regex in java for the stringjava中用于字符串的正则表达式
【发布时间】:2011-04-18 12:41:34
【问题描述】:

我是 Java 正则表达式的新手。我不想使用带有分隔符的 java split 并尝试获取单个令牌。我不觉得它是一个整洁的方式。我有以下字符串

"Some String lang:c,cpp,java file:build.java"

我想把它分成三个部分

1 part containing "Some String" 
2 part containing "c,cpp,java" 
3 String containing "build.java"

lang:file: 可以放在任何地方,它们是可选的。

【问题讨论】:

  • 为什么不split?这当然不错。
  • 嗯,我觉得拆分让维护变得更加困难

标签: java regex split tokenize


【解决方案1】:

lang: 和 file: 可以放在任何地方,它们是可选的。

尝试以下表达式来获取语言列表和文件:

String input = "Some String lang:c,cpp,java file:build.java";
String langExpression = "lang:([\\w,]*)";
String fileExpression = "file:([\w\.]*)";

Patter langPattern = Pattern.compile(langExpression);
Matcher langMatcher = langPattern.matcher(input);
if (langMatcher.matches()) {
  String languageList = langMatcher.group(1);
}

Patter filePattern = Pattern.compile(fileExpression );
Matcher fileMatcher = filePattern.matcher(input);
if (fileMatcher .matches()) { 
  String filename= fileMatcher.group(1);
}

只要语言列表或文件名不包含空格,这应该适用于 lang:xxx file:xxxfile:xxx lang:xxx。如果 lang: 和/或 file: 丢失,这也可以工作。

您是否还期望有这样的字符串:file:build.java Some String lang:c,cpp,java

【讨论】:

  • 谢谢托马斯,我会试试这个。这将是让正则表达式为我工作的一个很好的开端。
  • @Nandish 你也可以看看regular-expressions.info,恕我直言,这是一个很好的参考。
【解决方案2】:

使用split 有什么“不可维护”的地方?

        String str = "Some String lang:c,cpp,java file:build.java";
        String[] s  = str.split("(lang|file):");

【讨论】:

    【解决方案3】:

    虽然split 可以实现您想要实现的目标,但您可以使用substringindexOf 方法编写自己的代码。就性能而言,这将比使用split 快​​得多。

    【讨论】:

    • 如果 OP 担心可维护性,我保证使用 substring 和 indexOf 滚动您自己的拆分变体在这方面没有帮助。此外,这对我来说是过早优化的味道。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多