在String中获取正确的数字

时间:2015-06-08 19:33:07

标签: java regex

我正在尝试在此字符串中选择整数值myListView.setAdapter(myAdapter),该字符串具有\ s \ d \ d \ s形式。我已经尝试了下面的代码,但我在行尾也得到了分钟值30,但我只想获得具有此格式30的值30。我该如何解决这个问题?

我感谢任何帮助。

执行m.group()之前的行;在这一行是两个30号

\s\d\d\s

后排:

wall street 4 06:28 07:29 07:59 08:29 08:59 30 19:59 20:29 21:04 22:04 23:04 00:04 00:30

结果应为

wall street 4 06:28 07:29 07:59 08:29 08:59 19:59 20:29 21:04 22:04 23:04 00:04 00:

我的代码:

wall street 4 06:28 07:29 07:59 08:29 08:59 19:59 20:29 21:04 22:04 23:04 00:04 00:30

3 个答案:

答案 0 :(得分:3)

你可以这样做:

line = line.replaceAll("(?<=\\d\\s)\\d{2}\\s*(?=\\d)", "");

获得你的输出。

RegEx Demo

答案 1 :(得分:1)

  

为什么会这样?

您的模式是正常的,并且根据需要匹配30 ..但在while循环中..您正在用{{替换m.group()(现在是30) 1}} ..因此," "的所有实例都将被替换..

  

如何解决?

您可以直接替换模式..即:

30

代码:

line = line.replaceAll("(?<=\\d\\s)\\d{2}(?=\\s\\d)", "").replaceAll(" +", " ");

请参阅Ideone Demo

答案 2 :(得分:0)

您可以使用matcher's replace functions

,而不是使用独立调用line.replace(m.group(), " ").replaceAll(" +", " ");

像这样:

IDEONE

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main (String[] args) throws java.lang.Exception
    {
        String line = "wall street 4 06:28 07:29 07:59 08:29 08:59 30 19:59 20:29 21:04 22:04 23:04 00:04 00:30";
        System.out.println( "Input:  " + line );
        Pattern pattern = Pattern.compile("(?<=\\d{2}:\\d{2})\\s+\\d{2}(?=\\s)");
        Matcher m = pattern.matcher(line);
        while (m.find()) {
            int value = Integer.parseInt(m.group().trim());
            line = m.replaceFirst("");
            System.out.println( "Output: " + line );
        }    
    }
}