Java 字符串方法,将 2 个或更多 space 的所有序列替换为单个 space
Java string method that replaces all sequences of 2 or more spaces with a single space
我正在尝试用单个 space.
替换字符串中两个或多个白色 space 的所有序列
我已经使用 String.trim().replaceAll(" +", " ") 方法得到了它。
但我试图利用我所知道的自己解决这个问题,我接近了,想知道是否有人可以解决我必须解决的问题。
这是我的尝试:
StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = 0; i < sampleTextBuilder.length(); i++) {
if (Character.isLetter(sampleTextBuilder.charAt(i))) {
isLetter = true;
isFirstWS = false;
}
else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isLetter) {
isFirstWS = true;
isLetter = false;
}
else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isFirstWS) {
sampleTextBuilder.deleteCharAt(i);
}
sampleText = sampleTextBuilder.toString();
}
你真的不需要布尔值。只需跟踪指数即可。请记住,一次删除一个字符的成本很高,因为这些 StringBuilder
方法在幕后进行了大量的数组复制。
还有一个微妙之处。当您从头开始迭代并删除字符时,所有字符都会向左移动一个位置。这可能需要额外的簿记。为了解决这个问题,你从右边开始迭代。然后当你删除一个字符时,它不会影响更左边的字符的相对位置。
String sampleText = "This is a test of removing extra spaces";
StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = sampleTextBuilder.length() - 1; i >= 0; i--) {
if (sampleTextBuilder.charAt(i) == ' ') {
// found a space, check front and back of string.
if (i == sampleTextBuilder.length() - 1 || i == 0) {
sampleTextBuilder.deleteCharAt(i);
}
// otherwise, delete one of them if two are present.
else if (sampleTextBuilder.charAt(i - 1) == ' ') {
sampleTextBuilder.deleteCharAt(i - 1);
}
}
}
sampleText = sampleTextBuilder.toString();
System.out.println("\"" + sampleText + "\"");
我正在尝试用单个 space.
替换字符串中两个或多个白色 space 的所有序列我已经使用 String.trim().replaceAll(" +", " ") 方法得到了它。
但我试图利用我所知道的自己解决这个问题,我接近了,想知道是否有人可以解决我必须解决的问题。
这是我的尝试:
StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = 0; i < sampleTextBuilder.length(); i++) {
if (Character.isLetter(sampleTextBuilder.charAt(i))) {
isLetter = true;
isFirstWS = false;
}
else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isLetter) {
isFirstWS = true;
isLetter = false;
}
else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isFirstWS) {
sampleTextBuilder.deleteCharAt(i);
}
sampleText = sampleTextBuilder.toString();
}
你真的不需要布尔值。只需跟踪指数即可。请记住,一次删除一个字符的成本很高,因为这些 StringBuilder
方法在幕后进行了大量的数组复制。
还有一个微妙之处。当您从头开始迭代并删除字符时,所有字符都会向左移动一个位置。这可能需要额外的簿记。为了解决这个问题,你从右边开始迭代。然后当你删除一个字符时,它不会影响更左边的字符的相对位置。
String sampleText = "This is a test of removing extra spaces";
StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = sampleTextBuilder.length() - 1; i >= 0; i--) {
if (sampleTextBuilder.charAt(i) == ' ') {
// found a space, check front and back of string.
if (i == sampleTextBuilder.length() - 1 || i == 0) {
sampleTextBuilder.deleteCharAt(i);
}
// otherwise, delete one of them if two are present.
else if (sampleTextBuilder.charAt(i - 1) == ' ') {
sampleTextBuilder.deleteCharAt(i - 1);
}
}
}
sampleText = sampleTextBuilder.toString();
System.out.println("\"" + sampleText + "\"");