【问题标题】:String with backlash- java带反冲的字符串 - java
【发布时间】:2016-11-23 07:21:55
【问题描述】:

我有一个字符串如下:

String str="cn=sxscapp3\20,ou=Division,o=abc";

现在我想获取字符串的子字符串。

String newstr=str.substring(0,str.indexOf(","));

Expected result : cn=sxscapp3\20

Actual result: cn=sxscapp3\

关于上述情况的任何建议都会有所帮助。

【问题讨论】:

  • 您提供的代码没有包含反斜杠的字符串。相反,您展示了一个字符串文字,其中包含 U+0010 的八进制转义序列。我的猜测是,这不是您的 actual 代码所具有的。请提供minimal reproducible example
  • 嗨 @JonSkeet 我的程序读取 ldap 树并检索其上下文。如示例所示。我需要从整个字符串中获取 cn 值。当字符串有反斜杠时,我无法处理反斜杠后面的尾随字符。
  • 所以在minimal reproducible example 中显示。目前,您的代码包含 U+0010 但没有反斜杠。目前尚不清楚您正在使用的字符串中是否是 actually 。您应该能够在不涉及任何 LDAP 的情况下演示该问题,只要您已完成适当的诊断工作以找出您实际上从 LDAP 获取的字符串。

标签: java string escaping backslash


【解决方案1】:

在实际执行substring之前,您需要通过替换\\\\20来转义\20字符,您可以参考以下代码:

String str="cn=sxscapp3\20,ou=Division,o=abc";
str = str.replaceAll("\20", "\\\\20");
String newstr=str.substring(0,str.indexOf(","));
System.out.println(newstr);

输出:cn=sxscapp3\20

【讨论】:

  • 嗨,正如我在我的 cmets 中提到的,字符串值是由程序动态检索的。我将不得不动态处理 \XX 值。任何建议都会有所帮助。
  • 你说的\XX是什么意思,它并不总是\20是吗?
  • 你知道至少要转义的字符集(数组)吗?不然怎么知道逃什么?
  • 程序检索到的字符串值可能带有反斜杠。例如:cn=sxscapp3\20,ou=Division,o=abc 。另一个例子是 cn=sxscap3\30,ou=Division,o=abc。我需要转义反斜杠和后面的字符,直到逗号。
【解决方案2】:

看看 Ascii 表...

如果您打印类似:\60

System.out.println("\60"); 

与打印 0 相同,因为 0 映射到 60(八进制)

你需要先去掉斜线

在做str = str.replaceAll("\20", "\\\\20");

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多