【发布时间】:2012-02-18 17:37:54
【问题描述】:
我需要一段代码,我可以使用它从 Java 中的字符串中提取大写的子字符串。 例如:
"a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]"
我需要提取CCBBBBBBB和AAAA
【问题讨论】:
-
这是regular expressions的工作。
标签: java regex string substring extraction
我需要一段代码,我可以使用它从 Java 中的字符串中提取大写的子字符串。 例如:
"a:[AAAA|0.1;BBBBBBB|-1.90824;CC|0.0]"
我需要提取CCBBBBBBB和AAAA
【问题讨论】:
标签: java regex string substring extraction
您可以使用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
【讨论】:
这可能就是你要找的:
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()));
}
}
}
【讨论】:
我认为你应该做一个替换所有正则表达式来将你不想要的字符变成分隔符,也许是这样的:
【讨论】:
如果您只想提取所有大写字母,请使用[A-Z]+,如果您只需要大写子字符串,这意味着如果您有小写字母,则不需要它(HELLO 可以,但Hello 不是) 然后使用\b[A-Z]+\b
【讨论】:
这应该演示正确的语法和方法。更多细节可以在这里找到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]+ 部分是完成大部分工作的正则表达式。如果您想深入了解,这里有很多强大的正则表达式教程。
【讨论】: