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]
答案 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]
}
如果您连续两次ints
或String
,这将有助于您:
"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]