我试图使用问号作为字符串的变量。
我试过......
strings.xml
<string name="questionMark">\?</string>
.class
String questionMark;
questionMark = getResources().getString(R.string.questionMark);
String delim4 = (questionMark);
这会导致fource关闭正则表达式错误。
和
String delim4 = (\?);
这会出现错误无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \&#34; \&#39; \)
以及
我试过在它前面放两个反斜杠
String delim4 =(\\?)
System.out.println("delim "+ delim4);
但这只是逃脱了第二次斜线,有时力也会关闭。 那个输出是
delim \?
可以告诉我如何将问号作为字符串。我用它作为变量来吐出一个字符串。 String Im拆分无法更改。
plz help
修改添加的拆分代码
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;
}
答案 0 :(得分:5)
正如用户laalto
所指出的,?
是正则表达式中的元字符。你必须解决这个问题。
让我们看看这里发生了什么。首先,一些基本规则:
`?` is not a special character in Java
`?` is a reserved character in regex
这需要:
String test = "?"; // Valid statement in java, but illegal when used as a regex
String test = "\?"; // Illegal use of escape character
为什么第二个陈述错了?因为我们试图逃避一个并不特殊的角色(在Java中)。好的,我们会回到这一点。
现在,对于split(String)
方法,我们需要转义?
- 它是正则表达式中的元字符。因此,我们需要 \?
用于正则表达式。
回到字符串,我们如何获得\?
?我们需要逃离 \(backslash)
- 而不是问号!
这是工作流程:
String delim4 = "\\?";
此声明为我们提供了\?
- 它逃脱了\(backslash)
。
String[] parts4 = fIdStpTwo.split(delim4);
这允许我们在\?
方法中使用split()
作为正则表达式。由于delim4
作为正则表达式传递, \?
用作?
。这里,前缀\
用于转义?
。
您的观察:
String delim4 = (\?);
这会出现错误无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \&#34; \&#39; \)
我在上面介绍了这一点。您正在java级别转义?
- 但它不是一个特殊字符,不需要转义 - 因此错误。
String delim4 =(\\?)
System.out.println("delim "+ delim4);
但这只是逃脱了第二次斜线,有时力也会关闭。那个输出是
delim \?
是我们想要的。将其视为一个两阶段过程更容易。第一阶段处理成功将\(backslash)
放在?
前面。在第二阶段,正则表达式发现?
前缀为\
并使用?
作为文字而非元字符。
以下是如何将正则表达式放在res / values / strings.xml中的:
<string name="questionMark">\\?</string>
顺便说一下,还有另一种选择 - 这些日子我没有定期使用 - split()
效果很好。
您可以使用StringTokenizer
使用分隔符而不是正则表达式。 Afaik,任何文字都可以用作分隔符。因此,您可以直接使用?
:
StringTokenizer st = new StringTokenizer(stringToSplit, "?");
while (st.hasMoreTokens()) {
// Use tokens
String token = st.nextToken();
}
答案 1 :(得分:1)
最简单的方法是引用或反斜杠:
<string name="random">"?"</string>
<string name="random">\?</string>
答案 2 :(得分:0)
最终代码。
String startDelim = ("\\?");
String realDelim = (startDelim);
String[] parts4 = fIdStpOne.split(realDelim);
String fIdStpTwo= parts4[0];
String JUNK4 = parts4[1];
答案 3 :(得分:-1)
通常你只是按照字面意思来说,就像
一样String q = "?";
但是,你说你用它来分割字符串。 split()
采用正则表达式,?
是正则表达式中的元字符。要逃避它,请在前面添加反斜杠。反斜杠是Java字符串文字中的一个特殊字符,因此它也需要进行转义:
String q = "\\?";