如何使用各自的数据项从Java中的字符串创建数组



如何用两个相应的数据项从字符串创建数组。

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或任何其他数量的发生后分开。

最新更新