如何用两个相应的数据项从字符串创建数组。
String str="USA*2*Japan*8^2*India*5^4^2*Germany*5*";
在这里,我想创建两个项目的数组。
这样:
Arraylist<string> arr= [USA*2,Japan*8^2, India*5^4^2,Germany*5];
您正在使用*
将"主要项目"分开,但也可以在主项目内。
您的要求看起来很奇怪,但是让我们假设您正在获取这样的输入数据,并且您想像建议的那样将其拆分。这意味着每个数字之前的每个*
都是一个分离器,但是不在数字之前的*
不是。
您可以使用正则表达式来实现:(带有正面的表达式 (?<=
expr )
String str = "USA*2*Japan*8^2*India*5^4^2*Germany*5";
List<String> lst = Arrays.asList(Pattern.compile("(?<=\d)\*").split(str));
System.out.println(lst);
打印:
[USA*2, Japan*8^2, India*5^4^2, Germany*5]
在下面的评论中进一步澄清后,似乎问题比初始示例更通用。问题变成:
如何在分隔符上拆分字符串,但仅在2次出现后 分离器。
尽管有可能使用正则表达式,但在这样的循环中可能会更容易做到和理解:
public static List<String> split(String str, char splitChar, int afterOccurrences) {
List<String> lst = new ArrayList<>();
int occurrencesSeen = 0;
int start = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == splitChar) {
occurrencesSeen++;
if (occurrencesSeen >= afterOccurrences) {
lst.add(str.substring(start, i));
start = i + 1;
occurrencesSeen = 0;
}
}
}
if (start < str.length() - 1)
lst.add(str.substring(start));
return lst;
}
public static void main(String[] args) {
String str = "USA*2*Japan*8^2*India*5^4^2*Germany*5";
System.out.println(split(str, '*', 2));
}
此方法还允许您在3或任何其他数量的发生后分开。