簡體   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