gpt4 book ai didi

android - 在android中使用问号作为字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:04 37 4
gpt4 key购买 nike

我正在尝试使用问号作为字符串的变量。

我试过...

strings.xml

<string name="questionMark">\?</string>

.class

String questionMark;
questionMark = getResources().getString(R.string.questionMark);
String delim4 = (questionMark);

这会导致 fource close 正则表达式错误。

String delim4 = (\?);

这得到一个错误 Invalid escape sequence (valid ones are\b\t\n\f\r\"\'\)

还有

我试过在它前面放两个反斜杠

String delim4 =(\\?)
System.out.println("delim "+ delim4);

但这只是逃避了第二个斜杠,有时也会强制关闭。的输出是

删除\?

谁能告诉我如何将问号作为字符串放入。我用它作为变量来吐出一个字符串。 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;
}

最佳答案

正如用户 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 = (\?);

This gets an error Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

我在上面介绍了这一点。您正在 java 级别转义 ? - 但它不是特殊字符,不需要转义 - 因此出现错误。

String delim4 =(\\?)
System.out.println("delim "+ delim4);

But that just escapes the second slash and sometimes force closes as well. the output for that was

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();
}

关于android - 在android中使用问号作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24800186/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com