这里我有这种类型的String,我想将这个字符串拆分到每个元素,并希望为数字创建一个arraylist(整数)或一个整数数组。
我有一个像这样的字符串作为示例:123|00,124|01,125|00,126|01
我想先在一个包含
的列表中分隔所有元素123|00
124|01
125|00
126|01
之后我想创建一个只有
的整数数组列表或整数数组123
124
125
126
请任何人都可以建议我如何做到这一点
由于
代码:
List<Integer> numberList = new ArrayList<Integer>();
HashMap<Integer, Integer> statusMap = new HashMap<Integer, Integer>();
for (String tripnumber : tripNumbers) {
int number = Integer.parseInt(tripnumber.split("[|]")[0]);
Logger.d(TAG, "Trip number in Status Message = "+number);
int flag = Integer.parseInt(tripnumber.split("[|]")[1]);
Logger.d(TAG, "TM flag = "+flag);
if (number > 0) {
statusMap.put(number, flag);
numberList.add(number);
}
}
答案 0 :(得分:7)
String str = "123|00,124|01,125|00,126|01";
// Split on `|` or `,` and then take every alternate element.
String[] tokens = str.split("[|,]");
List<Integer> intList = new ArrayList<Integer>();
for (int i = 0; i < tokens.length; i = i + 2) {
intList.add(Integer.parseInt(tokens[i]));
}
更新: -
如果您有以|
和,
分隔的不一致值,则需要单独拆分: -
String str = "123|00,125|,126|01,|,";
String[] tokens = str.split(",");
Map<Integer, String> flagMap = new HashMap<Integer, String>();
for (String token: tokens) {
String[] arr = token.split("[|]");
if (arr.length == 0) {
continue;
}
if (arr[0].length() > 1) {
if (arr.length == 2) {
flagMap.put(Integer.parseInt(arr[0]), arr[1]);
} else {
flagMap.put(Integer.parseInt(arr[0]), "");
}
}
}
System.out.println(flagMap);
输出: -
{126=01, 125=, 123=00}
答案 1 :(得分:0)
这个怎么样:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String [] args) throws Exception
{
String input = "123|00,124|01,125|00,126|01";
List<Integer> out = new ArrayList<Integer>();
String [] s = input.split(",");
for(String i : s) {
int x = i.indexOf("|");
out.add(Integer.parseInt(i.substring(0,x)));
}
}
}
String.split()函数中有很多处理,特别是在单个字符的“快速路径”之外。这是一个简单的比较,以说明“本土”方法和“String.split”之间的性能差异。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main
{
public static void main(String [] args) throws Exception
{
String str = "123|00,124|01,125|00,126|01";
Date before = new Date();
for(int x=0;x<10000000;++x) {
/*
// Split on `|` or `,` and then take every alternate element.
String[] tokens = str.split("[|,]");
List<Integer> intList = new ArrayList<Integer>();
for (int i = 0; i < tokens.length; i = i + 2) {
intList.add(Integer.parseInt(tokens[i]));
}
*/
List<Integer> out = new ArrayList<Integer>();
String [] s = str.split(",");
for(String i : s) {
int y = i.indexOf("|");
out.add(Integer.parseInt(i.substring(0,y)));
}
}
Date after = new Date();
System.out.println(after.getTime() - before.getTime());
}
}
在我的电脑上,“拆分”测试需要6354ms,而“本土”需要2341ms。 “拆分”更容易编码,理解和维护。但“本土化”的速度提高了37%。
开发人员应该意识到split是一个专为复杂表达式设计的正则表达式处理器。对于简单情况,您可以选择更快的解决方案。了解权衡非常重要。
答案 2 :(得分:0)
或者尝试捕获,还有一些检查......
String s = "123|00,124|01,125|00,126|01";
String[] parts = s.split(",");
//The list of Strings the guy wanted
ArrayList<String> listParst = new ArrayList<String>(Arrays.asList(parts));
//The list of ints the guy wanted
ArrayList<Integer> listInt = new ArrayList<Integer>();
for(String is: listParst){
try {
String[] t = is.split("|");
if(t.length > 0){
int i = Integer.parseInt(t[0]);
listInt.add(i);
}
} catch(NumberFormatException e){
}
}