Java将一组字符串转换为String Array Integer Array

时间:2017-05-10 07:40:07

标签: java arrays

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class sourc {
public static void main(String[] args) {
        String name = null;
        Integer id = null;
        String strings = "one*10*two*11*three*12";
        StringTokenizer st2 = new StringTokenizer(strings, "*");
        while (st2.hasMoreElements()) {
            name = st2.nextElement().toString();
            id = Integer.parseInt(st2.nextElement().toString());
            String[] str = new String[]{name};
            List<String> al = new ArrayList<String>(Arrays.asList(str));
            System.out.println(al);
            ArrayList<Integer> arrli = new ArrayList<Integer>(id);
            arrli.add(id);
            System.out.println(arrli);
        }

}

我有像

这样的输出

[酮]

[10]

[2]

[11]

[3]

[12]

但我需要输出

[一,二,三]

[10,11,12]

4 个答案:

答案 0 :(得分:3)

您不需要在此处使用标记生成器,而是可以使用String#split()将字符串拆分为一些正则表达式替换逻辑。

String input = "one*10*two*11*three*12";
String[] words = input.replaceAll("\\d+\\*?", "")
                      .split("\\*");
String[] nums = input.replaceAll("[^0-9*]+\\*?", "")
                     .split("\\*");

答案 1 :(得分:2)

你应该在循环外创建两个List,并在循环中添加元素:

List<String> names = new ArrayList<String>();
List<Integer> ids = new ArrayList<Integer>();
while (st2.hasMoreElements()) {
    names.add(st2.nextElement().toString());
    ids.add(Integer.parseInt(st2.nextElement().toString()));
}
System.out.println(names);
System.out.println(ids);

请注意,此代码对输入进行了假设(偶数个元素,其中每对元素的第二个元素是整数),如果输入与这些假设不匹配,则会失败。

答案 2 :(得分:1)

为什么不使用拆分?

public static void main(final String[] args) {
    final String strings = "one*10*two*11*three*12";


    final String[] split = strings.split("\\*");

    final List<String> resultStrings = new ArrayList<>();
    final List<String> resultInt = new ArrayList<>();

    for (int i = 0; i < split.length; i++) {
        if (i % 2 == 0) {
            resultInt.add(split[i]);
        } else {
            resultStrings.add(split[i]);
        }
    }

    System.out.println(resultInt);
    System.out.println(resultStrings);
}

答案 3 :(得分:1)

为什么不使用:

public static void main(String[] args) {
    String strings = "one*10*two*11*three*12";
    String[] spl = strings.split("\\*");//split with *
    ArrayList<Integer> arrli = new ArrayList<>();
    List<String> al = new ArrayList<>();
    for (String s : spl) {//loop throw your resutl
        if (s.matches("\\d+")) {//check if your input is int or not
            arrli.add(Integer.parseInt(s));//if int add it to list of ints
        } else {
            al.add(s);//else add it to list of Strings
        }
    }
    System.out.println(al);//output [10, 11, 12]
    System.out.println(arrli);//output [one, two, three]

}

如果您连续两次intsString,这将有助于您:

"one*9*10*two*11*three*four*12"
//--^---^---------^------^

修改

  

现在我的输入就像   “astv * 12atthh124ggh * dhr1234sfff123 * dgdfg1234 * mnaoj”我需要拆分   字符串和数字分开

在这种情况下,您必须使用模式,例如:

String str = "astv*12atthh124ggh*dhr1234sfff123*dgdfg1234*mnaoj";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(str);
List<String> strings = new ArrayList<>();
List<Integer> nums = new ArrayList<>();
while (m.find()) {
    nums.add(Integer.parseInt(m.group()));
}
p = Pattern.compile("[a-z]+");
m = p.matcher(str);
while (m.find()) {
    strings.add(m.group());
}
System.out.println(nums);
System.out.println(strings);

<强>输出

[12, 124, 1234, 123, 1234]
[astv, atthh, ggh, dhr, sfff, dgdfg, mnaoj]