我正在尝试在此字符串中选择整数值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
答案 0 :(得分:3)
答案 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(" +", " ");
像这样:
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 );
}
}
}