Bil*_*sen 4 regex android escaping
我试图使用问号作为字符串的变量.
我试过了...
strings.xml
<string name="questionMark">\?</string>
.class
String questionMark;
questionMark = getResources().getString(R.string.questionMark);
String delim4 = (questionMark);
Run Code Online (Sandbox Code Playgroud)
这会导致fource关闭正则表达式错误.
和
String delim4 = (\?);
Run Code Online (Sandbox Code Playgroud)
这会出现错误无效的转义序列(有效的转义序列是\ b\t \n\f\r \"\\\ \)
并且
我试过在它前面放两个反斜杠
String delim4 =(\\?)
System.out.println("delim "+ delim4);
Run Code Online (Sandbox Code Playgroud)
但这只是逃脱了第二次斜线,有时力也会关闭.那个输出是
delim \?
可以告诉我如何将问号作为字符串.我用它作为变量来吐出一个字符串.String Im拆分无法更改.
请帮助
编辑添加的拆分代码
if (FinishedUrl.contains(questionMark)){
String delim3 = (".com/");
String[] parts3 = FinishedUrl.split(delim3);
String JUNK3= parts3[0];
String fIdStpOne = parts3[1];
String fIdStpTwo = fIdStpOne.replaceAll("=#!/","");
String delim4 = (questionMark);
String[] parts4 = fIdStpTwo.split(delim4);
String fIdStpThree= parts3[0];
String JUNK4 = parts3[1];
FId = fIdStpThree;
}
Run Code Online (Sandbox Code Playgroud)
正如用户所指出的laalto,?是正则表达式中的元字符.你必须解决这个问题.
让我们看看这里发生了什么.首先,一些基本规则:
`?` is not a special character in Java
`?` is a reserved character in regex
Run Code Online (Sandbox Code Playgroud)
这需要:
String test = "?"; // Valid statement in java, but illegal when used as a regex
String test = "\?"; // Illegal use of escape character
Run Code Online (Sandbox Code Playgroud)
为什么第二个陈述错了?因为我们试图逃避一个不特殊的角色(在Java中).好的,我们会回到这个.
现在,对于该split(String)方法,我们需要转义?- 它是正则表达式中的元字符.所以,我们需要 \? 正则表达式.
回到字符串,我们怎么做\??我们需要逃避的\(backslash)-而不是问号!
这是工作流程:
String delim4 = "\\?";
Run Code Online (Sandbox Code Playgroud)
这句话给了我们\?- 它逃脱了\(backslash).
String[] parts4 = fIdStpTwo.split(delim4);
Run Code Online (Sandbox Code Playgroud)
这让我们可以\?在split()方法中用作正则表达式.因为delim4正在作为正则表达式传递,\?所以用作?.这里,前缀\用于转义?.
你的观察:
String delim4 = (\?);
Run Code Online (Sandbox Code Playgroud)
这会出现错误无效的转义序列(有效的转义序列是\ b\t \n\f\r \"\\\ \)
我在上面介绍了这个.你正在逃避?java级别 - 但它不是一个特殊字符,不需要转义 - 因此错误.
String delim4 =(\\?)
System.out.println("delim "+ delim4);
Run Code Online (Sandbox Code Playgroud)
但这只是逃脱了第二次斜线,有时力也会关闭.那个输出是
delim \?
这就是我们想要的.将其视为一个两阶段过程更容易.第一阶段处理成功地放在\(backslash)前面?.在第二阶段,正则表达式发现它?已经被a 作为前缀\并?用作文字而不是元字符.
以下是如何将正则表达式放在res/values/strings.xml中:
<string name="questionMark">\\?</string>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,还有另一种选择 - 这些日子我不是经常使用的 - split()工作得很好.
您可以使用StringTokenizer哪些适用于分隔符而不是正则表达式.Afaik,任何文字都可以用作分隔符.所以,您可以?直接使用:
StringTokenizer st = new StringTokenizer(stringToSplit, "?");
while (st.hasMoreTokens()) {
// Use tokens
String token = st.nextToken();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |