Регулярное выражение в Java для строки - PullRequest
0 голосов
/ 18 апреля 2011

Я очень новый программист регулярных выражений Java.Я не хочу использовать разделение Java с разделителями и пытаться получить отдельные токены.Я не чувствую, что это аккуратно.У меня есть следующая строка

"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: могут быть размещены в любом месте, и они являются необязательными.

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Lang: и файл: могут быть размещены в любом месте, и они не являются обязательными.

Попробуйте следующие выражения, чтобы получить список языков и файл:

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:xxx, так и с file:xxx lang:xxx, если список языков или имя файла не содержат пробелов. Это также будет работать, если отсутствует lang: и / или file:.

Вы также ожидаете такую ​​строку: file:build.java Some String lang:c,cpp,java?

1 голос
/ 18 апреля 2011

Что такого «не поддерживаемого» в использовании split?

        String str = "Some String lang:c,cpp,java file:build.java";
        String[] s  = str.split("(lang|file):");
0 голосов
/ 18 апреля 2011

Хотя split может делать то, что вы хотите достичь, вы можете написать свой собственный код, используя методы substring и indexOf.Это будет намного быстрее, чем использование split с точки зрения производительности.

...