如何在java中从具有ASCII字符串组合的字符串中删除反斜杠(“\”)

如何在java中从具有ASCII字符串组合的字符串中删除反斜杠(“\”),java,Java,输入字符串是“ABC\1067546161” 我想删除“\”反斜杠,只从字符串中获取数字,但我们得到的字符串是ascii值。打印后的结果字符串是ABCF7546161 请提出一些解决办法 输入字符串为ABC\1067546161 预期结果为1067546161 可能是这样的 “ABC\1067546161”.replaceAll(“[a-zA-Z\\]”,”)可能是这样的 “ABC\1067546161.replaceAll(“[a-zA-Z\\]”,”)我认为这可能行得通,但代码太难看了

输入字符串是“ABC\1067546161”

我想删除“\”反斜杠,只从字符串中获取数字,但我们得到的字符串是ascii值。打印后的结果字符串是ABCF7546161

请提出一些解决办法

输入字符串为
ABC\1067546161

预期结果为
1067546161


可能是这样的
“ABC\1067546161”.replaceAll(“[a-zA-Z\\]”,”)
可能是这样的
“ABC\1067546161.replaceAll(“[a-zA-Z\\]”,”)
我认为这可能行得通,但代码太难看了

    String word = "ABC\1067546161";
    char badChar = word.charAt(3);
    String[] arr = word.split(Character.toString(badChar));
    System.out.println(Integer.toOctalString(badChar) + arr[1]);

您在问题中只提到了一个字符串,但在一些情况下,这很可能不起作用。

我认为这可能起作用,但代码非常难看

    String word = "ABC\1067546161";
    char badChar = word.charAt(3);
    String[] arr = word.split(Character.toString(badChar));
    System.out.println(Integer.toOctalString(badChar) + arr[1]);

您在问题中只提到了一个字符串,但在某些情况下,这很可能不起作用。

正如@TheLostMind在评论中指出的,您不能直接替换反斜杠,因为该字符串是用该值创建的

唯一的方法是操作输入本身并将其转换为字节数组而不是字符串。然后,您可以调用以字节[]为参数的字符串构造函数,它不会被转换

一旦你有了它,你可以使用正则表达式删除你不想要的部分,就像其他人建议的那样。下面是我用来测试的代码:

public static void main(String[] args) {
    // Input manipulation.
    byte[] input = {'A','B','C','\\','1','0','6','7','5','4','6','1','6','1'};
    String string = new String(input);
    System.out.println(string);

    // Splitting.
    String[] result = string.split("\\\\");
    System.out.println(result[1]);
}

正如@TheLostMind在一篇评论中指出的,您不能直接替换反斜杠,因为字符串是用该值创建的

唯一的方法是操作输入本身并将其转换为字节数组而不是字符串。然后,您可以调用以字节[]为参数的字符串构造函数,它不会被转换

一旦你有了它,你可以使用正则表达式删除你不想要的部分,就像其他人建议的那样。下面是我用来测试的代码:

public static void main(String[] args) {
    // Input manipulation.
    byte[] input = {'A','B','C','\\','1','0','6','7','5','4','6','1','6','1'};
    String string = new String(input);
    System.out.println(string);

    // Splitting.
    String[] result = string.split("\\\\");
    System.out.println(result[1]);
}


你不能这么做。字符串文本本身存储为
ABCF7546161
,而不是
“ABC\1067546161”
。输入字符串本身(打印时)中没有
\106
。创建字符串时是否可以转义“\”?必须转义“\”。否则,它将始终被解释为ASCII代码。只要看看这张图片,你就会明白我的意思。八进制数106表示F。当你打印“\106”时,你也会得到“F”。我刚刚了解到,我自己很难做到这一点,因为我是从其他系统获得的。是否有从字符串中删除\的解决方案。您不能这样做。字符串文本本身存储为
ABCF7546161
,而不是
“ABC\1067546161”
。输入字符串本身(打印时)中没有
\106
。创建字符串时是否可以转义“\”?必须转义“\”。否则,它将始终被解释为ASCII代码。只要看看这张图片,你就会明白我的意思。八进制数106表示F。当你打印“\106”时,你也会得到“F”。我刚刚了解到,我自己很难做到这一点,因为我是从其他系统获得的。是否有从字符串中删除\的解决方案。请解释为什么您降级了我,因为它不起作用。打印线程“main”java.util.regex.PatternSyntaxException:java.util.regex.Pattern.expr的java.util.regex.Pattern.clazz(未知源)处java.util.regex.Pattern.sequence(未知源)处的java.util.regex.Pattern.sequence(未知源)处索引8[a-zA-Z]^附近未关闭的字符类中的replacingException之前的字符串(未知源)java.util.regex.Pattern.compile(未知源)java.util.regex.Pattern.compile(未知源)java.util.regex.Pattern.compile(未知源)java.lang.String.replaceAll(未知源)demos.Sample.main(Sample.java:8)@ManojKumar,在java“ABC\1067546161.replaceAll”([a-zA-Z\\\\\\\\\\])中尝试这一个这种类型的字符串来自waffel库,因此我无法更改它。如果您有任何引用解决方案,请建议我。请解释为什么您降级了我,因为它不起作用。请在线程“main”java.util.regex.PatternSyntaxException:索引8[a-zA-Z]附近的未关闭字符类中打印该字符串,然后在线程“main”java.util.regex.PatternSyntaxException中重播该字符串^ java.util.regex.Pattern.error(未知源)java.util.regex.Pattern.clazz(未知源)java.util.regex.Pattern.sequence(未知源)java.util.regex.Pattern.expr(未知源)java.util.regex.Pattern.compile(未知源)java.util.regex.Pattern.compile(未知源)java.util.regex.Pattern.compile(未知源代码)在java.lang.String.replaceAll(未知源代码)在demos.Sample.main(Sample.java:8)@ManojKumar,在java“ABC\1067546161.replaceAll”([a-zA-Z\\\\\\],”中尝试这一个这种类型的字符串来自waffel库,因此我无法更改它。如果您有任何参考解决方案,请向我建议。我相信有一些方法可以使它变短,但现在我会让您自己这样做。不,这不起作用。正如@TheLostMind指出的,只要您指定字符串,字符串就会被转换,以便(3) 将返回F。@Aurasphere这确实有效。我自己已经测试过。我在F处拆分它,然后打印ascii码(八进制码:107)F和2.数组的object@H瓦德尼加德-虽然这个方法有效,但我不建议使用这种方法。如果字符串中已经有
F
,那会怎么样?@H瓦德尼加德我很抱歉,我错过了系统中的八进制转换。out。这确实有效。我相信有办法缩短它,但现在我会让你做的r你自己。不,这不起作用。正如@TheLostMind指出的,字符串在你赋值后会被转换,因此字符(3)将返回F。@Aurasphere这确实起作用。我自己测试过。我在F处拆分它,然后打印F和2.数组的ascii码(八进制码:107)object@H瓦尔德尼加德-虽然这个有效,但我不会