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

时间:2018-05-30 10:58:24

标签: java null backslash

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

4 个答案:

答案 0 :(得分:2)

这里有一个带有八进制值的String

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

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

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

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

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

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

/测试/ Test20?

因此,您可以使用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]

或在文字中:

  

/测试/ Test206

答案 1 :(得分:0)

替换为“\”的新字符串:

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

希望它有所帮助。

答案 2 :(得分:0)

作为输入"/Test/Test20\06""\"充当转义序列。但在这种情况下,它充当ASCII值。克服你的问题把你的字符串转换为char数组。然后提取它的最后一个值并将其转换为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); 

答案 3 :(得分:0)

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

作为旁注,如果需要删除字符串周围的\0个字符串终止字符,则string.trim()应该有效,但不能使用string.strip()