有一个字符串
String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";这个字符串会很长是个动态的,我想把它分解后存入一个数组,例如
str[0]="WELL^(,3)^(1)"
str[1]="A^(,5)"
str[2]="D^(,5)^(2)"
str[3]="C^(,5)^(2)"
str[4]="马五^(5)^(,2)"
str[5]="H^(5)^(,2)"
str[6]="FF^(,2)"
str[7]=...
str[8]=...
str[9]=...
str[10]=...请高手指点
String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";这个字符串会很长是个动态的,我想把它分解后存入一个数组,例如
str[0]="WELL^(,3)^(1)"
str[1]="A^(,5)"
str[2]="D^(,5)^(2)"
str[3]="C^(,5)^(2)"
str[4]="马五^(5)^(,2)"
str[5]="H^(5)^(,2)"
str[6]="FF^(,2)"
str[7]=...
str[8]=...
str[9]=...
str[10]=...请高手指点
WELL^(,3)^(1)A^(,5)这一段,要分解为2个数组元素WELL^(,3)^(1)
A^(,5)
用正则应该是可以搞定的吧
下面是我自己用JS写的,没有处理 中文的
"WELL^(,3)^(1)A^(,2)".replace(/(\w+(\^\(,?\d\)){1,})/g,"@$1")
public static void test3() {
String st = "WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)"; String regex = "[a-zA-Z\u4e00-\u9fa5]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(st);
List<Integer> indexList = new ArrayList<Integer>(0); while (m.find()) {
indexList.add(m.start());
} String[] val = new String[indexList.size()];
indexList.add(st.length()); for (int i = 0; i < indexList.size() - 1; i++) {
val[i] = st.substring(indexList.get(i), indexList.get(i + 1));
} System.err.println(java.util.Arrays.toString(val));
}
结果:
[WELL^(,3)^(1), A^(,5), D^(,5)^(2), C^(,5)^(2), 马五^(5)^(,2), H^(5)^(,2), FF^(,2)]
注意数组越界
String[] sa = st.split("(?<=([\\^]\\([,]?\\d\\))([\\^]\\([,]?\\d\\)))");
System.out.println(Arrays.toString(sa));
String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";
Pattern p = Pattern.compile("[a-zA-Z\u4e00-\u9fa5]+([\\^]\\([,]?\\d\\)){1,2}");
Matcher m = p.matcher(st);
List<String> list = new ArrayList<String>();
while (m.find()) {
//System.out.println(m.group());
list.add(m.group());
}
System.out.println(list);
String[] sa = list.toArray(new String[0]);
public static void main(String[] args) {
//String str1="A^(2)D^(,5)C^(,5)^(2)马五^(5)^(,2)";
String str1="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";
String arr[] = str1.split("(?<=\\))(?=[\\w\u4e00-\u9fa5])");
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}