为了账号安全,请及时绑定邮箱和手机立即绑定

如何从随机字符串消息中提取 6 位数字?6 位数字不在消息的开头或结尾

如何从随机字符串消息中提取 6 位数字?6 位数字不在消息的开头或结尾

12345678_0001 2023-07-19 15:02:50
我有一条带有 6 位 OTP 的字符串消息。但这不是在开始或结束时。所以索引没有帮助。替换是有效的,但我的消息可能随时改变,所以这个技巧也失败了。我的消息示例:您的一次性密码是:123456FA+9qCX9VSuString subFirst= message.replace("<#> Your OTP code is : ", ""); String finalOTP = message.replace("FA+9qCX9VSu", "");它仅产生此静态消息的预期结果。如何仅获取任何消息的 6 位数字。或者还有其他方法从消息中提取 OTP 吗?
查看完整描述

7 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你可以这样得到otp。

String allNum=message.replaceAll("[^0-9]","");
String otp=allNum.substring(0,6);


查看完整回答
反对 回复 2023-07-19
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您可以从任何消息中提取任意 6 位数字String。“|” 用于查找更多可能的组合。只有“\d{6}”还可以为您的问题提供正确的结果。


//find any 6 digit number

Pattern mPattern = Pattern.compile("(|^)\\d{6}");


if(message!=null) {

    Matcher mMatcher = mPattern.matcher(message);

    if(mMatcher.find()) {

        String otp = mMatcher.group(0);

        Log.i(TAG,"Final OTP: "+ otp);

    }else {

        //something went wrong

        Log.e(TAG,"Failed to extract the OTP!! ");

    }

}


查看完整回答
反对 回复 2023-07-19
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

String message="OTP 为 145673,并且在接下来的 20 分钟内同样有效"; 

System.out.println(message.replaceFirst("\d{6}", "******"));

我希望这有帮助。


查看完整回答
反对 回复 2023-07-19
?
LEATH

TA贡献1936条经验 获得超6个赞

如果您的消息始终以“您的 OTP 代码是:”开头,并且在代码后有换行符 (\n),则使用以下内容:


Pattern pattern = Pattern.compile("is : (.*?)\\n", Pattern.DOTALL);

    Matcher matcher = pattern.matcher(message);

    while (matcher.find()) {

      Log.i("tag" , matcher.group(1));

    }


查看完整回答
反对 回复 2023-07-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以使用正则表达式查找数字子字符串,只需从子字符串中先取 6。

查看完整回答
反对 回复 2023-07-19
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

使用这样的正则表达式:


public static void main(final String[] args) {

    String input = "Your OTP code is : 123456\r\n" + "\r\n" + "FA+9qCX9VSu";

    Pattern regex = Pattern.compile(":\\s([0-9]{6})");

    Matcher m = regex.matcher(input);

    if (m.find()) {

        System.out.println(m.group(1));

    }

}


查看完整回答
反对 回复 2023-07-19
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

尝试一下希望这会对您有所帮助。


String expression = "[0-9]{6}";

    CharSequence inputStr = message;


    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);

    Matcher matcher = pattern.matcher(inputStr);


查看完整回答
反对 回复 2023-07-19
  • 7 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信