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

如何在Java中从字符串中提取大写子字符串?,java,regex,string,substring,extraction,Java,Regex,String,Substring,Extraction,我需要一段代码,用它可以从Java中的字符串中提取大写的子字符串。 例如: "a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]" 我需要提取CCBBBBBBB和AAAA这应该说明正确的语法和方法。更多详情可在此处和 String myStr=“a:[AAAA | 0.1;bbbbb |-1.90824;CC | 0.0]”; Pattern大写=Pattern.compile(“[A-Z]+”); Matcher Matcher=大写.Matcher(myStr); 列

我需要一段代码,用它可以从Java中的字符串中提取大写的子字符串。 例如:

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

我需要提取
CC
BBBBBBB
AAAA

这应该说明正确的语法和方法。更多详情可在此处和

String myStr=“a:[AAAA | 0.1;bbbbb |-1.90824;CC | 0.0]”;
Pattern大写=Pattern.compile(“[A-Z]+”);
Matcher Matcher=大写.Matcher(myStr);
列表结果=新建ArrayList();
while(matcher.find()){
results.add(matcher.group());
}
用于(字符串s:结果){
系统输出打印项次;
}

[A-Z]+
部分是执行大部分工作的正则表达式。如果你想更深入地了解它,有很多强大的正则表达式教程。

如果你只想提取所有大写字母,请使用
[a-Z]+
,如果你只想使用大写子字符串,这意味着如果你有小写字母,你不需要它(
HELLO
可以,但是
HELLO
不可以),然后使用
\b[A-Z]+\b

我认为您应该执行“全部替换正则表达式”操作,将不需要的字符转换为分隔符,可能类似于以下内容:

  • str.replaceAll(“[^A-Z]+”,“”)
  • 修剪任何前导或尾随空格
  • 然后,如果愿意,可以调用str.split(“”)

  • 这可能就是你想要的:

    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()));
           }
        }
    }
    
    import java.util.regex.Pattern;
    导入java.util.regex.Matcher;
    公共类MatcherDemo{
    私有静态最终字符串REGEX=“[A-Z]+”;
    私有静态最终字符串输入=“a:[AAAA | 0.1;bbbbb |-1.90824;CC | 0.0]”;
    公共静态void main(字符串[]args){
    Pattern p=Pattern.compile(REGEX);
    //获取匹配器对象
    匹配器m=p.Matcher(输入);
    列表序列=新向量();
    while(m.find()){
    add(INPUT.substring(m.start(),m.end());
    }
    }
    }
    
    您可以使用。唯一的问题可能是空字符串,但很容易将其过滤掉:

    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
    

    这是一个.Word boundary的作业-您可以阅读更多有关它的内容,实际上正则表达式的使用方式是“\\b[^a-Z]+\\b”,而“JOHN DOE是一个名字”的输出是JOHN DOE使用string.split在Java中这还从混合大小写字符串返回单大写字符;
    AAAA
    BBBBBBB
    CC