繁体   English   中英

从java字符串中删除'\\0'

[英]Remove '\0' from java string

我想从我的 java String删除"\\0"
输入: "/Test/Test20\\06"
结果: "/Test/Test206"
怎么做?

您在这里拥有的是一个八进制值的String

System.out.println(
    Arrays.toString(
        "/Test/Test20\06".toCharArray()
    )
);

[/, T, e, s, t, /, T, e, s, t, 2, 0, ]

不打印最后一个字符,因为数值是6 (八进制中的 \\06`)并且不是可见字符。 这是 ACK 字符。

因此,您将无法使用正则表达式或String替换方法替换\\0因为这不是String而是字符表示的一部分

我们可以通过用正则表达式替换某些字符来确认这一点(不是您想要的解决方案,仅用于演示)

String s = "/Test/Test20\06";
System.out.println(s.replaceAll("[\\000-\\011]", "?"));

/测试/测试20?

因此,您可以使用Pattern来捕获这些值并根据您的需要转换它们。 这是一个不安全的解决方案(正则表达式仅与八进制末尾的情况相匹配。

String s = "/Test/Test20\06";
Pattern p = Pattern.compile("(.*?)([\\000-\\011])");
Matcher m = p.matcher(s);

StringBuilder sb = new StringBuilder();
while(m.find()){
    sb.append(m.group(1)).append("" + (int)(m.group(2).charAt(0)));
}
System.out.println(Arrays.toString(sb.toString().toCharArray()));

[/, T, e, s, t, /, T, e, s, t, 2, 0, 6]

或在文本中:

/测试/测试206

要获取替换了“\\”的新字符串:

newStringName = oldStringName.replace("\\", "");

希望能帮助到你。

作为您的输入"/Test/Test20\\06""\\"充当转义序列。 但在这种情况下,它充当 ASCII 值。 为了克服您的问题,将您的字符串转换为字符数组。 然后提取它的最后一个值并将其转换为int。

解决方案:

String s = "/Test/Test20\06";
char[] c= s.toCharArray();
String ss="";
for(int i= 0; i<c.length-1;i++){
  ss+=c[i];
}
ss+=(int)c[c.length-1];
System.out.println(ss); 

正如其他人已经指出的那样,从字符串中删除\\0会损坏其内容。

作为旁注,如果需要删除字符串周围的\\0字符串终止字符, string.trim()应该可以工作 - 但不是string.strip()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM