如何在Java中从字符串中提取大写子字符串?

4

我需要一段Java代码,能够从字符串中提取出所有大写字母组成的子字符串。 例如:

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

我需要提取 CCBBBBBBBAAAA


4
这是一个需要使用正则表达式的工作。 - Jesper
5个回答

6
你可以使用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

这也会从一个大小写混合的字符串中返回单个大写字符; - user26270

5
这应该演示了正确的语法和方法。更多详细信息可以在这里找到:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.htmlhttp://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

这可能是你正在寻找的内容:

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
如果您只想提取所有大写字母,请使用[A-Z]+,如果您只想要大写子字符串,也就是说,如果您有小写字母,则不需要它(HELLO可以,但Hello不行),那么请使用\b[A-Z]+\b

1
单词边界 - 您可以在此处了解更多信息。 - apines
实际上,使用正则表达式的方法是 "\b[^A-Z]+\b",在Java中使用string.split的输出为“JOHN DOE is a name”的结果是JOHN DOE。 - exilonX

0

我认为你应该使用替换所有正则表达式,将你不想要的字符转换成分隔符,可能像这样:

  1. str.replaceAll("[^A-Z]+", " ")
  2. 去除任何前导或尾随空格。
  3. 然后,如果你愿意,可以调用 str.split(" ")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接