此代码似乎没有做正确的工作。它删除了单词之间的空格!
input = scan.nextLine().replaceAll("[^A-Za-z0-9]", "");
我想删除字符串中的所有额外空格和所有数字或缩写,除了单词和此字符:'
。
例如:
输入: 34 4fF$#@D one 233 r # o'clock 329riewio23
返回:one o'clock
答案 0 :(得分:0)
public static String filter(String input) {
return input.replaceAll("[^A-Za-z0-9' ]", "").replaceAll(" +", " ");
}
第一个替换替换除字母字符,单引号和空格之外的所有字符。第二个替换用一个空格替换一个或多个空格的所有实例。
答案 1 :(得分:0)
您的解决方案不起作用,因为您不替换数字而且还替换了'
字符。
查看此解决方案:
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,}
)并且必须有一个尾随空格,则只需要单词。
答案 2 :(得分:-1)
如果您想提取该时间信息,请使用此正则表达式组匹配:
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);
}
正则表达式非常幼稚,只有在输入始终具有类似格式时才会起作用。