我想检查字符串的最后一个字符,使用'\ W'来表示不是非单词字符的字符,并允许某些符号如“。,!etc”从头顶我想到使用了代码与此类似。
Boolean notCompleted = true;
int deduct = 1;
while(notCompleted){
if(string.charAt(string.length() -deduct) == '\W'){ // '\W' <-- doesn't work since it accepts anything other than "escape sequences".
if(string.charAt(string.length() -deduct) == '.'||string.charAt(string.length() -deduct) == ','||string.charAt(string.length() -deduct) == '!'){
//Do nothing and move on to the while loop
}else{
//Replace the non word character with ' '.
}
}
deduct++;
if(deduct >= html.length()){
notCompleted = false;
}
}
这不起作用的原因是因为使用string.charAt只接受“Escapes sequence”。
我的问题是还有另一种方法来解决这个问题,而不是这样做。
string.replaceAll("\W", "");
非常感谢所有建议。谢谢。
感谢提示npinti给了我构建此代码。但是我得到一个错误行
所请求的fakeNewString的结果应为“!asdsdefwef。,a ,, sda.sd”;
fakeNewString = sb.toString(); // NullPointerException
public static void test5(){
Boolean notCompleted = true;
String fakeNewString = "!@#$%^&*( asdsdefwef.,a,,sda.sd";
int start = 0, end = 1;
StringBuilder sb = null;
try{
while(notCompleted){
start++;
String tempString = fakeNewString.substring(start, end);
if(Pattern.matches("\\W$", tempString)){
if(Pattern.matches("!", tempString)||Pattern.matches(".", tempString)||Pattern.matches(",", tempString)||Pattern.matches("\"", tempString)){
//do nothing
sb.append(tempString);
}else{
//Change it to spaces.
tempString = " ";
sb.append(tempString);
}
}
end++;
if(end >= fakeNewString.length()){
notCompleted = false;
fakeNewString = sb.toString();
System.out.println(fakeNewString);
}
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
答案 0 :(得分:2)
你可以这样做:
Pattern pattern = Pattern.compile("\\W$");
Matcher matcher = pattern.match(string);
if (matcher.find())
{
//do something when the string ends with a non word character
}
有关正则表达式的更多信息,请查看this教程。
答案 1 :(得分:1)
您可以稍微不同的方式使用String.replaceAll
来执行此操作。它实现了与您尝试编写的代码相同的效果,这似乎是解决简单问题的复杂解决方案。试试这段代码:
string.replaceAll("[^\\w!,.]", " ");
现在所有无效字符都被空格替换,并且多个连续出现的字符被多个空格替换。
答案 2 :(得分:1)
让我们试着打破问题(欲望)并回答它:
我想使用'\ W'检查字符串的最后一个字符是否为非单词字符,并允许某些符号如“。,!etc”
首先我们有:
我想检查字符串的最后一个字符
字符串X末尾的字符串表达式:
X$
然后:
表示不是非单词字符的字符
表达式:
[^\W]
,即\w
还有:
允许使用某些符号,例如“。,!etc”
添加到上面的表达式中:
[\w.,!]
最终结果是:
[\w.,!]$
钽哒! (虽然我猜OP正在寻找其他东西,我是为了它而做的。)