有一个字符串
String str = "ggg;ggg;nnn;nnn;aaa;aaa;xxx;xxx;";
如何将其拆分为这样的字符串 “GGG; GGG;” “NNN; NNN;” “AAA; AAA;” “XXX; XXX;” ???????
答案 0 :(得分:2)
使用Regex
String input = "ggg;ggg;nnn;nnn;aaa;aaa;xxx;xxx;";
Pattern p = Pattern.compile("([a-z]{3});\\1;");
Matcher m = p.matcher(input);
while (m.find())
// m.group(0) is the result
System.out.println(m.group(0));
将输出
GGG; GGG;
NNN; NNN;
AAA; AAA;
XXX; XXX;
答案 1 :(得分:1)
拆分并加入他们。
public static void main(String[] args) throws Exception {
String data = "ggg;ggg;nnn;nnn;aaa;aaa;xxx;xxx;";
String del = ";";
int splitSize = 2;
StringBuilder sb = new StringBuilder();
for (Iterable<String> iterable : Iterables.partition(Splitter.on(del).split(data), splitSize)) {
sb.append("\"").append(Joiner.on(del).join(iterable)).append(";\"");
}
sb.delete(sb.length()-3, sb.length());
System.out.println(sb.toString());
}
答案 2 :(得分:1)
我假设您只想检查最后一个段是否相似,而不是每个已读取的段。
如果情况并非如此,那么您可能需要使用ArrayList
代替Stack
。
我还假设每个段的格式为/([a-z])\1\1/
。
如果不是这种情况,那么你应该用:
更改if语句 (stack.peek().substring(0,index).equals(temp))
public static Stack<String> splitString(String text, char split) {
Stack<String> stack = new Stack<String>();
int index = text.indexOf(split);
while (index != -1) {
String temp = text.substring(0, index);
if (!stack.isEmpty()) {
if (stack.peek().charAt(0) == temp.charAt(0)) {
temp = stack.pop() + split + temp;
}
}
stack.push(temp);
text = text.substring(index + 1);
index = text.indexOf(split);
}
return stack;
}
答案 3 :(得分:1)
使用正则表达式拆分:
String data="ggg;ggg;nnn;nnn;aaa;aaa;xxx;xxx;";
String [] array=data.split("(?<=\\G\\S\\S\\S;\\S\\S\\S);");
答案 4 :(得分:0)
其他一些答案,仅适用于您的具体示例输入。
您可以看到,在您的示例中,有两个相似之处:
换句话说:如果您的所有输入都真正满足了这两个属性,那么可以避免分裂 - 因为您知道完全在您的每个位置找到的内容串。
当然,遵循“真实”分裂的其他答案更灵活;但是(理论上),你可以继续前进并做一堆子串调用,以便直接访问所有元素。