2015-06-01 122 views
-1

这段代码似乎没有做正确的工作。它消除了单词之间的空格!正则表达式删除除了单词之外的所有内容。 java

input = scan.nextLine().replaceAll("[^A-Za-z0-9]", ""); 

我想删除所有多余的空格和字符串中的所有数字或缩写,除了文字和这个人物:'

例如:

输入: 34 4fF$#@D one 233 r # o'clock 329riewio23

回报:one o'clock

+0

你已经试过了什么?什么似乎是一个问题? –

+0

@ PM77-1我忘了添加代码。它现在有 – bad

回答

0
public static String filter(String input) { 
    return input.replaceAll("[^A-Za-z0-9' ]", "").replaceAll(" +", " "); 
} 

第一替换替换所有字符除了字母字符,单引号和空格。第二个替换用一个空格替换一个或多个空格的所有实例。

+0

它不工作! – bad

-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); 
} 

正则表达式是相当幼稚不过,如果输入始终是一个类似格式的才有效。

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,})并且必须有尾部空格,则只需要该单词。

相关问题