Java 仅在外大括号中使用逗号拆分字符串的算法
我只想在第一个大括号内拆分字符串。我如何用java实现它Java 仅在外大括号中使用逗号拆分字符串的算法,java,string-split,Java,String Split,我只想在第一个大括号内拆分字符串。我如何用java实现它 Input String 1: text2(text3, text4), text5(text6, text7) String1: text2(text3, text4) String2: text5(text6, text7) Input String 2: text2, text3(text4, text5(text6, text7, text8)) String1: text2 String2: text3(text4, te
Input String 1: text2(text3, text4), text5(text6, text7)
String1: text2(text3, text4)
String2: text5(text6, text7)
Input String 2: text2, text3(text4, text5(text6, text7, text8))
String1: text2
String2: text3(text4, text5(text6, text7, text8))
输入字符串可以有任意数量的级别。请假定输入字符串具有匹配的大括号
提前感谢包ic.ac.uk.relationshipvisualiser.app;
package ic.ac.uk.relationshipvisualiser.app;
import java.util.ArrayList;
import java.util.List;
public class tmpTest3 {
public static List<String> process(String p_inp) {
List<String> res = new ArrayList<String>();
p_inp = p_inp.trim();
int numberOfOpenBracketsEncountered = 0;
String t = "";
String cur = "";
for (int c=0;c<p_inp.length();c++) {
cur = p_inp.substring(c,c+1);
if (cur.equals("(")) {
numberOfOpenBracketsEncountered++;
}
if (cur.equals(")")) {
numberOfOpenBracketsEncountered--;
}
if (cur.equals(",")) {
if (numberOfOpenBracketsEncountered==0) {
if (t.length()>0) res.add(t.trim());
t = "";
} else {
cur = cur;
t = t + cur;
}
} else {
cur = cur;
t = t + cur;
}
}
if (t.length()>0) res.add(t.trim());
return res;
}
public static void main(String[] args) {
System.out.println("Start tmpTest3");
List<String> inputs = new ArrayList<String>();
inputs.add("text2(text3, text4), text5(text6, text7)");
inputs.add("text2, text3(text4, text5(text6, text7))");
for (int c=0;c<inputs.size();c++) {
System.out.println("Running test for " + inputs.get(c));
List<String> res = process(inputs.get(c));
System.out.println("Got " + res.size() + " strings as a result:");
for (int d=0;d<res.size();d++) {
System.out.println(" - :" + res.get(d) + ":");
}
System.out.println("----------------------");
}
System.out.println("End tmpTest3");
}
}
导入java.util.ArrayList;
导入java.util.List;
公共类tmpTest3{
公共静态列表进程(字符串p_inp){
List res=new ArrayList();
p_inp=p_inp.trim();
int numberOfOpenBracketsEncountered=0;
字符串t=“”;
字符串cur=“”;
对于(int c=0;c0)res.add(t.trim());
t=“”;
}否则{
cur=cur;
t=t+cur;
}
}否则{
cur=cur;
t=t+cur;
}
}
如果(t.length()>0)res.add(t.trim());
返回res;
}
公共静态void main(字符串[]args){
System.out.println(“启动tmpTest3”);
列表输入=新的ArrayList();
输入。添加(“text2(text3,text4),text5(text6,text7)”;
添加(“text2,text3(text4,text5(text6,text7))”;
对于(int c=0;c这对您有效吗?
导入java.util.array
class Program {
public static void main (String[] args) throws java.lang.Exception {
String subject1 = "text2(text3, text4), text5(text6, text7)";
String subject2 = "text2, text3(text4, text5(text6, text7))";
String p = "\\s*\\d*\\(\\)";
String[] res = subject1.split(p);
System.out.println(Arrays.toString(res));
res=subject2.split(p);
System.out.println(Arrays.toString(res));
} // end main
} // end
发出:-
[text2(text3,text4),text5(text6,text7)]
[text2,text3(text4,text5(text6,text7))String str1=inputStr.substring(0,inputStr.indexOf(“,”).trim();String str2=inputStr.substring(inputStr.indexOf(“,”)+1,inputStr.length()).trim();
和inputStr.split(“,”)这显然不起作用。我在split中寻找是否有一个简单的正则表达式可以使用