1

如何在java中使用正则表达式找到字符串的最后六位数字?

例如,我有一个字符串:238428342938492834823

无论字符串的长度是多少,我都希望字符串只能找到最后 6 位数字。我试过"/d{6}$"没有成功。

有什么建议或新想法吗?

4

4 回答 4

5

您只是使用了错误的转义字符。\d{6}匹配六位数字,而/d匹配文字正斜杠后跟六个文字d'。

模式应该是:

\d{6}$

当然,在 Java 中,您还必须转义\, 以便:

String pattern = "\\d{6}$";
于 2013-07-11T16:41:37.213 回答
2

另一个答案为您提供了此问题的正则表达式解决方案,但是正则表达式不是该问题的合理解决方案。

if (text.length >= 6) {
    return text.substring(text.length - 6);
}

如果您发现自己尝试使用正则表达式来解决问题,那么您应该做的第一件事就是停下来好好想想为什么您认为正则表达式是一个好的解决方案。

于 2013-07-11T17:01:14.413 回答
0

如果您的字符串总是由数字组成,您应该考虑使用不同的数据类型。

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Numberthings {
    static final BigInteger NUMBER_1000000 = BigInteger.valueOf(1000000);
    static final NumberFormat SIX_DIGITS = new DecimalFormat("000000"); 

    public static void main(String[] args) {
        BigInteger number = new BigInteger("238428342938492834823");
        BigInteger result = number.remainder(NUMBER_1000000);
        System.out.println(SIX_DIGITS.format(result.longValue()));

        number = new BigInteger("238428342938492000003");
        result = number.remainder(NUMBER_1000000);
        System.out.println(SIX_DIGITS.format(result.longValue()));
    }
}

这将产生以下输出:

834823
000003
于 2013-07-12T09:51:35.577 回答
0

这就是你如何在一行中做到这一点:

String last6 = str.replaceAll(".*(.{6})", "$1");
于 2013-07-12T09:55:54.563 回答