这段代码似乎没有做正确的工作。它消除了单词之间的空格!正则表达式删除除了单词之外的所有内容。 java
input = scan.nextLine().replaceAll("[^A-Za-z0-9]", "");
我想删除所有多余的空格和字符串中的所有数字或缩写,除了文字和这个人物:'
。
例如:
输入: 34 4fF$#@D one 233 r # o'clock 329riewio23
回报:one o'clock
这段代码似乎没有做正确的工作。它消除了单词之间的空格!正则表达式删除除了单词之外的所有内容。 java
input = scan.nextLine().replaceAll("[^A-Za-z0-9]", "");
我想删除所有多余的空格和字符串中的所有数字或缩写,除了文字和这个人物:'
。
例如:
输入: 34 4fF$#@D one 233 r # o'clock 329riewio23
回报:one o'clock
public static String filter(String input) {
return input.replaceAll("[^A-Za-z0-9' ]", "").replaceAll(" +", " ");
}
第一替换替换所有字符除了字母字符,单引号和空格。第二个替换用一个空格替换一个或多个空格的所有实例。
它不工作! – bad
如果你想只提取时间信息使用这个表达式小组赛:
input = scan.nextLine();
Pattern p = Pattern.compile("([a-zA-Z]{3,})\\s.*?(o'clock)");
Matcher m = p.matcher(input);
if (m.find()) {
input = m.group(1) + " " + m.group(2);
}
正则表达式是相当幼稚不过,如果输入始终是一个类似格式的才有效。
您的解决方案不起作用,因为您不替换数字,而且还替换'
字符。
退房这一解决方案:
Pattern pattern = Pattern.compile("[^| ][A-Za-z']{2,} ");
String input = scan.nextLine();
Matcher matcher = pattern.matcher(input);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
result.append(matcher.group());
}
System.out.println(result.toString());
它查找字符串或空间([^| ]
)的开头,然后采取以下所有字符([A-Za-z']
)。但是,如果有2个或更多字符({2,}
)并且必须有尾部空格,则只需要该单词。
你已经试过了什么?什么似乎是一个问题? –
@ PM77-1我忘了添加代码。它现在有 – bad