我得到一个字符串,我必须检索值
Je pense que nous devons实用程序“ .slit”
if (stringReceived.contains("ID")&& stringReceived.contains("Value")) {
这是我的字符串:
I/RECEIVER: [1/1/0 3
I/RECEIVER: :32:11]
I/RECEIVER: Timestam
I/RECEIVER: p=946697
I/RECEIVER: 531 ID=4
I/RECEIVER: 3 Value=
I/RECEIVER: 18
我收到的值是1字节乘1字节。 我想恢复Timestamp,Id和Value的值。
答案 0 :(得分:3)
您也可以使用正则表达式。像这样:
String example="[11/2/19 9:48:25] Timestamp=1549878505 ID=4 Value=2475";
Pattern pattern=Pattern.compile(".*Timestamp=(\\d+).*ID=(\\d+).*Value=(\\d+)");
Matcher matcher = pattern.matcher(example);
while(matcher.find()) {
System.out.println("Timestamp is:" + matcher.group(1));
System.out.println("Id is:" + matcher.group(2));
System.out.println("Value is:" + matcher.group(3));
}
如果令牌的顺序可以不同(例如ID可以在时间戳记之前),您也可以这样做。但是由于它看起来像是结构化的日志,所以我怀疑您是否需要这样做。
答案 1 :(得分:2)
第一个[11/2/19 9:48:25]
似乎是不必要的,因此我们直接跳到“时间戳”中将其删除。
使用indexOf()
,我们可以找到时间戳的开始位置。
// "Timestamp=1549878505 ID=4 Value=2475"
line = line.substring(line.indexOf("Timestamp"));
由于每个字符串都由空格分隔,所以我们可以将其分割。
// ["Timestamp=1549878505", "ID=4" ,"Value=2475"]
line.split(" ");
现在,对于每个令牌,我们都可以使用'='索引对其进行子字符串化并将其解析为字符串。
for(String token: line.split(" ")) {
int v = Integer.parseInt(token.substring(token.indexOf('=') + 1));
System.out.println(v);
}
希望有帮助:)
答案 2 :(得分:2)
String text = "Timestamp=1549878505 ID=4 Value=2475";
Pattern p = Pattern.compile("ID=(\\d)");
Matcher m = p.matcher(text);
if (m.find()) {
System.out.println(m.group(1));
}
输出 4
答案 3 :(得分:2)
一个简单的正则表达式也是一种选择:
Declare
string1 varchar2(10) := 'hello';
string2 varchar2(10) := 'world';
Type arr is varray(10) of varchar2(30);
concat arr;
Begin
concat := arr();
concat.extend;
for i in 1..5 loop
concat(i) := substr(string1,i,1);
concat.extend;
concat(i+1) := substr(string2,i,1);
dbms_output.put_line(concat(i) || concat(i+1));
end loop;
End;
打印:
时间戳= 1549878505
ID = 4
值= 2475
答案 4 :(得分:1)
您可以尝试:
String txt= "[11/2/19 9:48:25] Timestamp=1549878505 ID=4 Value=2475";
String re1= ".*?\\d+.*?\\d+.*?\\d+.*?\\d+.*?\\d+.*?\\d+.*?(\\d+).*?(\\d+).*?(\\d+)";
Pattern p = Pattern.compile(re1,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String int1=m.group(1);
String int2=m.group(2);
String int3=m.group(3);
System.out.print("("+int1+")"+"("+int2+")"+"("+int3+")"+"\n");
}
答案 5 :(得分:1)
使用下面的代码,您将在列表的索引0
处找到时间戳,在1
处找到id,在列表中的2
处找到值。
Pattern pattern = Pattern.compile("=\\d+");
Matcher matcher = pattern.matcher(stringToMatch);
final List<String> matches = new ArrayList<>();
while (matcher.find()) {
String ans = matcher.group(0);
matches.add(ans.substring(1, ans.length()));
}
解释正则表达式
=
从字面上匹配字符=
\d*
匹配一个数字(等于[0-9])
*
量词-匹配零次到无限次,并尽可能多地匹配