Android中split方法分割GUID字符串结果异常问题咨询
问题原因与解决方法
错误根源
Java中String.split()方法的参数是正则表达式,而|是正则表达式里的特殊元字符,代表“或”的逻辑。直接传入"|"时,正则会将其解析为匹配空字符串的分隔符,导致原字符串被拆分成单个字符的数组,这就是你拿到uGUID="e"、uAPI="6"的原因。
正确解决方案
需要对|进行转义,有两种常用方式:
方式1:使用双反斜杠转义
在Java字符串中,反斜杠本身需要转义,所以要写"\\|"来表示正则里的字面量|:
String decodedQrText = qrCodeHelper.decodeQrFromUri(getContext(), attachment.internalUri); String[] separated = decodedQrText.split("\\|"); String uGUID = separated[0]; String uAPI = separated[1]; String uEmail = separated[2];
方式2:使用Pattern.quote()方法
如果不确定分隔符是否包含正则特殊字符,用Pattern.quote()可以自动将字符串转义为正则字面量,更安全:
import java.util.regex.Pattern; // ... String decodedQrText = qrCodeHelper.decodeQrFromUri(getContext(), attachment.internalUri); String[] separated = decodedQrText.split(Pattern.quote("|")); String uGUID = separated[0]; String uAPI = separated[1]; String uEmail = separated[2];
验证结果
修改后,separated数组会按|正确分割成3个元素,每个元素对应完整的GUID和邮箱字符串。
内容的提问来源于stack exchange,提问作者Mark Anderson
相关产品推荐
相关产品推荐

