问题很清楚。代码应该是Java而不使用正则表达式(如果有人没有注意到,那不是重复,我要求在没有正则表达式的情况下执行此操作)。
input: This is a string with more than one space between words.
output: This is a string with more than one space between words.
有没有比这样做更好的方法?
public static String delSpaces(String str){
StringBuilder sb = new StringBuilder(str);
ArrayList<Integer> spaceIndexes = new ArrayList<>();
for ( int i=0; i < sb.length(); i++ ){
if ( sb.charAt(i) == ' ' && sb.charAt(i-1) == ' '){
spaceIndexes.add(i);
}
}
for (int i = 0; i < spaceIndexes.size(); i++){
sb.deleteCharAt(spaceIndexes.get(i)-i);
}
return new String(sb.toString());
}
答案 0 :(得分:11)
使用str.replaceAll("\\s+"," ");
//使用正则表达式的最简单方法
public static String delSpaces(String str){ //custom method to remove multiple space
StringBuilder sb=new StringBuilder();
for(String s: str.split(" ")){
if(!s.equals("")) // ignore space
sb.append(s+" "); // add word with 1 space
}
return new String(sb.toString());
}
第三种方式:
public static String delSpaces(String str){
int space=0;
StringBuilder sb=new StringBuilder();
for(int i=0;i<str.length();i++){
if(str.charAt(i)!=' '){
sb.append(str.charAt(i)); // add character
space=0;
}else{
space++;
if(space==1){ // add 1st space
sb.append(" ");
}
}
}
return new String(sb.toString());
}
答案 1 :(得分:4)
str = str.replaceAll("\\s+", " ");
可以使用正则表达式来实现这一目的。这比你必须为dos编写方法要快得多。
答案 2 :(得分:1)
class Try
{
public static void main(String args[])
{
String str = "This is a string with more than one space between words.";
char[] c = str.toCharArray();
String str1 = "";
for(int i = 0;i<str.length()-1;i++)
{
if((c[i] == ' '&& c[i+1] != ' ') || (c[i] != ' '))
str1 += c[i];
}
System.out.println(str1);
}
}
这很容易。