[英]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.