Как извлечь заглавные подстроки из строки в Java? - PullRequest
4 голосов
/ 25 января 2012

Мне нужен фрагмент кода, с помощью которого я могу извлечь подстроки из верхнего регистра из строки в Java. Например:

"a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]"

Мне нужно извлечь CC BBBBBBB и AAAA

Ответы [ 5 ]

6 голосов
/ 25 января 2012

Вы можете сделать это с помощью String[] split(String regex). Единственная проблема может быть с пустыми строками, но их легко отфильтровать:

String str = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";
String[] substrings = str.split("[^A-Z]+");
for (String s : substrings)
{
    if (!s.isEmpty())
    {
        System.out.println(s);
    }
}

Выход:

AAAA
BBBBBBB
CC
5 голосов
/ 25 января 2012

Это должно продемонстрировать правильный синтаксис и метод.Более подробную информацию можно найти здесь http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html и http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html

String myStr = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";
Pattern upperCase = Pattern.compile("[A-Z]+");
Matcher matcher = upperCase.matcher(myStr);
List<String> results = new ArrayList<String>();

while (matcher.find()) {
    results.add(matcher.group());
}

for (String s : results) {
    System.out.println(s);
}

Часть [A-Z]+ является регулярным выражением, которое выполняет большую часть работы.Есть много сильных руководств по регулярным выражениям, если вы хотите больше в них разобраться.

0 голосов
/ 25 января 2012

Это, вероятно, то, что вы ищете:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MatcherDemo {

    private static final String REGEX = "[A-Z]+";
    private static final String INPUT = "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       //  get a matcher object
       Matcher m = p.matcher(INPUT);
       List<String> sequences = new Vector<String>();
       while(m.find()) {
           sequences.add(INPUT.substring(m.start(), m.end()));
       }
    }
}
0 голосов
/ 25 января 2012

Я думаю, что вы должны сделать замену всех регулярных выражений, чтобы превратить нежелательный символ в разделитель, возможно, что-то вроде этого:

  1. str.replaceAll ("[^ AZ] +"," ")
  2. Обрезать любые начальные или конечные пробелы.
  3. Затем, если хотите, вы можете вызвать str.split (" ")
0 голосов
/ 25 января 2012

Если вы хотите просто извлечь все заглавные буквы, используйте [A-Z]+, если вы хотите просто подстроку в верхнем регистре, это означает, что если у вас есть строчные буквы, вам это не нужно (HELLO в порядке, но Hello - нет) затем используйте \b[A-Z]+\b

...