我在字符串上有这个信息:
0183600NEWDEVICE
0147900:4239
0147901:0200
0147902:2971
0157903:01598
0157904:02754
0157905:03383
0157906:02590
0187908:04.02.01
0157909:19.45
0117911:0
0098540
我只想获得最后的信息(":"和" \ n")
我的意思是:4239,0200,2971等等
我尝试使用split:
String[] result = readMessage.split(":|\n");
它有效,但我只想要"之间的信息:"和" \ n"不是其余的。我的意思是:
result[0] = 4239
result[1] = 0200
result[2] = 2971
...
我该如何解决?
编辑:之后,我想采取"结果"并将其中的每一部分放在TextView
上 For example:
mTextView.setText("FEV = " + result[0] + "\n");
我的解决方案:(感谢每个人!)
String[] result = readMessage.split(":");
int j=0;
for (int i=0;i<result.length;i++){
if (result[i].contains("\n")){
result[j] = result[i];
String [] result2 = result[j].split("\n");
result[j]=result2[0];
j++;
}
}
答案 0 :(得分:2)
您可以尝试以下方法而不是拆分 -
Pattern p = Pattern.compile(".+:(.+)\n");
Matcher m = p.matcher(x);
List<String> fields = new ArrayList<String>();
while (m.find()) {
fields.add(m.group(1));
}
注意:您可能需要修改正则表达式。
答案 1 :(得分:0)
Split会给你一个W ='want'的数组,N ='not wanted'。
如果输入模式稳定,输出数组将具有模式
... NWNWNWNW
所以你可以简单地得到偶数索引。
另一个解决方案是逐行读取(按行分割)。然后查找冒号,并丢弃冒号前的内容(包括在内)。
答案 2 :(得分:0)
我亲自做正则表达式路线!
答案 3 :(得分:0)
您可能会这样做:
String str = "one:two";
String[] splitted = str.split(":");
然后你可以检查一下:
for (int i=0;i<splitted.length;i++){
if (splitted[i].contains("\n")){
splitted[i].replace("\n","");
}
}
答案 4 :(得分:0)
只需将“\ n”分开,而不是同时放在\n
和:
上,以实现此目的。
string[] result = readMessage.split("\n");
然后:
String str = "test:one";
String lastBit = str.substring(str.indexOf(":")+1, str.length());
System.out.println(lastBit); //output = "one"
或者,您可以在:
上再次拆分每个字符串并获取第二个字符串(对于第一个拆分操作返回的每个字符串)。
答案 5 :(得分:0)
List<String> output = new ArrayList<String>();
String[] lines = readMessage.split("\n");
for(String line : lines)
{
int index = line.indexOf(":");
if(index != -1 && index < line.length)
{
output.add(line.substring(index + 1, line.length());
}
}