如何恢复整数?

时间:2019-02-12 08:38:07

标签: java android split

我得到一个字符串,我必须检索值

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的值。

6 个答案:

答案 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])

*量词-匹配零次到无限次,并尽可能多地匹配