如何避免java中的反斜杠

如何避免java中的反斜杠,java,core,Java,Core,首先看下面的代码 public static void main(String args[]) { System.out.println(new Stringtest().test("The system has saved your payment under transaction number \369825655.")); } private String test(String aa) { return aa.substr

首先看下面的代码

public static void main(String args[])
   {
     System.out.println(new Stringtest().test("The system has saved your payment under        transaction number \369825655."));
    }

private String test(String aa)
    {
        return aa.substring(58);
    }
所以从逻辑上讲,这个方法应该打印369825665。但由于这个反斜杠,它正在打印9825655。现在我要整数。我该怎么办。我无法将\更改为\\,因为文本来自某个网站。

请尝试\\369825655-基本上,它会跳过转义标志。然后将所有\字符替换为空字符

\是转义字符。您需要转义转义字符

System.out.println(new Stringtest().test("The system has saved your payment under transaction number \\369825655."));
有关转义序列的详细信息,请参见。从本质上讲,反斜杠告诉系统,它后面的字符应该以一种特殊的方式解释,而不仅仅是纯文本。当你逃离时,它也会得到特别的对待。。。作为纯文本,而不是转义字符

System.out.println(new Stringtest().test("The system has saved your payment under transaction number \\369825655."));
它有时会让人困惑,但一旦你了解了核心概念,它就会变得直观

编辑:如果你不能控制字符串的格式,你可能会倒霉。我已经在Eclipse中调试过了,似乎只要用它创建字符串,转义字符就会被处理,事务号的前两位数字就会丢失。您可能需要让您的数据库人员或格式化此糟糕字符串的人更改其实现,以便您完成所需的操作。Eclipse调试器至少表明了这一点

很显然,\ 36处理得很好,并被解释为另一个ASCII字符,但没有显示出来。但在其他情况下,这可能会将异常作为无效的转义序列抛出

在我自己的测试中,似乎只要声明/创建字符串文字,就会发生信息丢失。据我所知,在那之后就没有办法恢复了


添加另一个反斜杠转义字符

ArrayList System.out.println(new Stringtest().test("The system has saved your payment under        transaction number \\369825655."));

不,我不能更改文本。它来自一个网站。如果您打算在上述方法中使用该方法,则需要从从该网站收到的字符串中创建一个新字符串。您不能修改该字符串,因为字符串是不可变的。但当我创建一个新字符串时,文本将进入新字符串,因为系统已将您的付款保存在交易编号9825655下。意思是数字的前两位消失。Eclipse调试器确认了这一点。请参阅我的编辑。如果在创建字符串时真的删除了数字,那么您可能需要让给您这个的人更改他们的代码。或者你可以把它作为一个字符数组,然后做你需要做的事情。实际上,即使立即将它转换成char[]也不能保存数据。从字面上看,一旦创建字符串文字,您就会丢失信息。不,我无法更改文本。它来自一个网站。我想你可以。只需使用string replace函数。是的,您只需要使用string.replace和replace\为\\private string testString aa{return aa.replace\\,\\\\;}这正是您想说的,但它显示了结果,因为系统已将您的付款保存在交易编号9825655下。表示前两个数字消失不,我无法更改文本。它来自一个网站。为什么不先将它存储在一个变量中,对它进行操作,然后做任何你需要做的事情呢?因为很自然,所有的网站文本都是不可变和不可压缩的。我会避免添加或使用反斜杠。还有很多其他符号可以使用,比如事务编号:369825655BTW,在我看来,这在逻辑上甚至不应该编译。但不幸的是,由于Java理解八进制转义序列,\36将转换为字符30,即ASCII记录分隔符char。您必须解释“文本来自网站”业务。这对我来说毫无意义。好吧,但是为什么要从这行中提取文本并将其放入Java源代码中,然后进行编译?为什么不使用Selenium API从页面中读取它呢?这样您就不必担心编译器对反斜杠的处理。