zya*_*mat 653 java whitespace
我有一个像这样的字符串:
mysz = "name=john age=13 year=2001";
Run Code Online (Sandbox Code Playgroud)
我想删除字符串中的空格.我试过trim()但这只删除了整个字符串之前和之后的空格.我也尝试了replaceAll("\\W", "")但是=也被删除了.
如何通过以下方式实现字符串:
mysz2 = "name=johnage=13year=2001"
Run Code Online (Sandbox Code Playgroud)
Gur*_*oca 1252
st.replaceAll("\\s+","")删除所有空格和不可见字符(例如,制表符\n).
st.replaceAll("\\s+","")并st.replaceAll("\\s","")产生相同的结果.
第二个正则表达式比第一个正则表达式快20%,但随着连续空格数量的增加,第一个正则表达式优于第二个正则表达式.
如果不直接使用,请将值分配给变量:
st = st.replaceAll("\\s+","")
Run Code Online (Sandbox Code Playgroud)
nit*_*k01 242
replaceAll("\\s","")
Run Code Online (Sandbox Code Playgroud)
\w =任何单词字符
\W =任何不是单词字符的东西(包括标点符号等)
\s =任何空格字符(包括空格,制表符等)
\S =任何不是空格字符的东西(包括字母和数字,以及标点符号等)
(编辑:正如所指出的,如果你想要\s到达正则表达式引擎,你需要转义反斜杠,导致\\s.)
Fle*_*tch 98
这个问题最正确的答案是:
String mysz2 = mysz.replaceAll("\\s","");
Run Code Online (Sandbox Code Playgroud)
我刚从其他答案中修改了这段代码.我发布它是因为除了正是问题所要求的,它还表明结果作为新字符串返回,原始字符串不会被修改,因为某些答案有点暗示.
(有经验的Java开发人员可能会说"当然,你实际上无法修改字符串",但这个问题的目标受众可能不知道这一点.)
小智 40
处理字符串操作的一种方法是来自Apache commons的StringUtils.
String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到它.commons-lang包括更多,并得到很好的支持.
v.n*_*ahc 34
如果您还需要删除不可破坏的空格,可以像这样升级代码:
st.replaceAll("[\\s|\\u00A0]+", "");
Run Code Online (Sandbox Code Playgroud)
kam*_*zak 29
如果您更喜欢实用程序类到正则表达式,那么Spring Framework中的StringUtils中有一个方法trimAllWhitespace(String).
Jon*_*röm 25
你已经从Gursel Koca得到了正确的答案,但我相信这不是你真正想做的事情.如何解析键值呢?
import java.util.Enumeration;
import java.util.Hashtable;
class SplitIt {
public static void main(String args[]) {
String person = "name=john age=13 year=2001";
for (String p : person.split("\\s")) {
String[] keyValue = p.split("=");
System.out.println(keyValue[0] + " = " + keyValue[1]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
name = john
age = 13
year = 2001
小智 21
你应该用
s.replaceAll("\\s+", "");
Run Code Online (Sandbox Code Playgroud)
代替:
s.replaceAll("\\s", "");
Run Code Online (Sandbox Code Playgroud)
这样,它将在每个字符串之间使用多个空格.上述正则表达式中的+符号表示"一个或多个\"
最简单的方法是使用诸如" " 之org.apache.commons.lang3.StringUtils类的commons-lang3库类commons-lang3-3.1.jar.
StringUtils.deleteWhitespace(String str)在输入字符串上使用静态方法" ",它将从中删除所有空格后返回一个字符串.我尝试了你的示例字符串" name=john age=13 year=2001"并且它完全返回了我想要的字符串 - " name=johnage=13year=2001".希望这可以帮助.
我正在尝试一个聚合答案,其中测试了删除字符串中所有空格的所有方法。每种方法运行 100 万次,然后取平均值。注意:一些计算将用于总结所有运行。
@jahir 的回答第一名
第二名
第三名
第四名
public class RemoveAllWhitespaces {
public static String Regex(String text){
return text.replaceAll("\\s+", "");
}
public static String ForLoop(String text) {
for (int i = text.length() - 1; i >= 0; i--) {
if(Character.isWhitespace(text.codePointAt(i))) {
text = text.substring(0, i) + text.substring(i + 1);
}
}
return text;
}
public static String StringBuilder(String text){
StringBuilder builder = new StringBuilder(text);
for (int i = text.length() - 1; i >= 0; i--) {
if(Character.isWhitespace(text.codePointAt(i))) {
builder.deleteCharAt(i);
}
}
return builder.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
import org.junit.jupiter.api.Test;
import java.util.function.Function;
import java.util.stream.IntStream;
import static org.junit.jupiter.api.Assertions.*;
public class RemoveAllWhitespacesTest {
private static final String longText = "123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222";
private static final String expected = "1231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc222";
private static final String shortText = "123 123 \t 1adc \n 222";
private static final String expectedShortText = "1231231adc222";
private static final int numberOfIterations = 1000000;
@Test
public void Regex_LongText(){
RunTest("Regex_LongText", text -> RemoveAllWhitespaces.Regex(text), longText, expected);
}
@Test
public void Regex_ShortText(){
RunTest("Regex_LongText", text -> RemoveAllWhitespaces.Regex(text), shortText, expectedShortText);
}
@Test
public void For_LongText(){
RunTest("For_LongText", text -> RemoveAllWhitespaces.ForLoop(text), longText, expected);
}
@Test
public void For_ShortText(){
RunTest("For_LongText", text -> RemoveAllWhitespaces.ForLoop(text), shortText, expectedShortText);
}
@Test
public void StringBuilder_LongText(){
RunTest("StringBuilder_LongText", text -> RemoveAllWhitespaces.StringBuilder(text), longText, expected);
}
@Test
public void StringBuilder_ShortText(){
RunTest("StringBuilder_ShortText", text -> RemoveAllWhitespaces.StringBuilder(text), shortText, expectedShortText);
}
private void RunTest(String testName, Function<String,String> func, String input, String expected){
long startTime = System.currentTimeMillis();
IntStream.range(0, numberOfIterations)
.forEach(x -> assertEquals(expected, func.apply(input)));
double totalMilliseconds = (double)System.currentTimeMillis() - (double)startTime;
System.out.println(
String.format(
"%s: %s ms (%s ms)",
testName,
totalMilliseconds / (double)numberOfIterations,
totalMilliseconds
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
public static void main(String[] args) {
String s = "name=john age=13 year=2001";
String t = s.replaceAll(" ", "");
System.out.println("s: " + s + ", t: " + t);
}
Output:
s: name=john age=13 year=2001, t: name=johnage=13year=2001
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137833 次 |
| 最近记录: |