Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中从字符串中提取7个数字的序列?_Java_String_Sequence - Fatal编程技术网

如何在Java中从字符串中提取7个数字的序列?

如何在Java中从字符串中提取7个数字的序列?,java,string,sequence,Java,String,Sequence,假设我有一个字符串对象,包含这句话,是由1234567人于2020-03-21在07:23时写的。 如何仅提取字符串的1234567部分? 也许使用这个问题的解决方案,但我不知道如何将提取的数字限制在所需的序列上 如果我在这个字符串上使用str.replaceAll[^0-9],我将得到2020032112345670723,这意味着它将提取字符串中的所有数字,但在我的案例7中,我只希望序列包含一定数量的数字 此外,序列并不总是在同一个位置,因此使用substringindex from、ind

假设我有一个字符串对象,包含这句话,是由1234567人于2020-03-21在07:23时写的。 如何仅提取字符串的1234567部分? 也许使用这个问题的解决方案,但我不知道如何将提取的数字限制在所需的序列上

如果我在这个字符串上使用str.replaceAll[^0-9],我将得到2020032112345670723,这意味着它将提取字符串中的所有数字,但在我的案例7中,我只希望序列包含一定数量的数字


此外,序列并不总是在同一个位置,因此使用substringindex from、index to将不起作用。

我可能会使用正则表达式来实现这一点。对于七个相邻的数字,这将是\d{7}或更好\b\d{7}\b谢谢@AlexRudenko

为此,您可能需要使用模式API:

导入java.util.regex.Matcher; 导入java.util.regex.Pattern; // ... Pattern digitPattern=Pattern.compile\\b\\d{7}\\b; Matcher m=digitPattern.Matcher; 而m.find{ 字符串s=m.group; //只打印你的7个数字 System.out.printlns; } 我刚刚验证过,它工作正常


中提取模式我可能会使用正则表达式来完成。对于七个相邻的数字,这将是\d{7}或更好\b\d{7}\b谢谢@AlexRudenko

为此,您可能需要使用模式API:

导入java.util.regex.Matcher; 导入java.util.regex.Pattern; // ... Pattern digitPattern=Pattern.compile\\b\\d{7}\\b; Matcher m=digitPattern.Matcher; 而m.find{ 字符串s=m.group; //只打印你的7个数字 System.out.printlns; } 我刚刚验证过,它工作正常

模式提取取自

您可以进行简单的线性搜索,以找到长度为7的数字子字符串:

输出:

1234567
您可以执行简单的线性搜索以查找长度为7的数字子字符串:

输出:

1234567

假设位数不总是7,我会使用正则表达式

[0-9]+

内部部分[0-9]+查找一个或多个数字。它的左边和右边的空格确保只有在被空格包围时才能找到数字,因此输入字符串中的日期和时间将被忽略。括号与group1结合使用,只返回数字,周围没有空格

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{

    private static final Pattern regexp=Pattern.compile(" ([0-9]+) ");

    public static void main(String[] args)
    {
        String s="This sentence was written on 2020-03-21 by person 1234567 at 07:23 hours";
        Matcher matcher=regexp.matcher(s);
        if (matcher.find())
        {
            String number=matcher.group(1);
            System.out.printf("number=%s",number);
        }
    }
}
要仅查找5-8位数字,可以编写[0-9]{5,8}


同时,正如其他人所写,\\d可以用作[0-9]的替代项。

假设位数不总是7,我将使用正则表达式

[0-9]+

内部部分[0-9]+查找一个或多个数字。它的左边和右边的空格确保只有在被空格包围时才能找到数字,因此输入字符串中的日期和时间将被忽略。括号与group1结合使用,只返回数字,周围没有空格

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main
{

    private static final Pattern regexp=Pattern.compile(" ([0-9]+) ");

    public static void main(String[] args)
    {
        String s="This sentence was written on 2020-03-21 by person 1234567 at 07:23 hours";
        Matcher matcher=regexp.matcher(s);
        if (matcher.find())
        {
            String number=matcher.group(1);
            System.out.printf("number=%s",number);
        }
    }
}
要仅查找5-8位数字,可以编写[0-9]{5,8}


同时,正如其他人所写,\\d可以用作[0-9]的替代品。

无可否认,这有点复杂,但你可以用空格分割字符串,检查哪一个是纯数字日期不会因为连字符。好主意,但不是我的情况,因为名字中可能有数字而不是person,人12@mdenci使用正则表达式,你不必关心字符串中的位置,你肯定应该使用正则表达式。好的,你也可以检查这个数字是否正好有7位。。。但在第二个数字为7位的情况下,即使是正则表达式也会失败。@mmika1000是的,确实有点复杂,但你可以用空格分割字符串,检查哪一个是纯数字日期不会因为连字符。好主意,但我的情况不是这样,因为名字中可以有一个数字而不是person,例如person12@mdenci使用正则表达式,你不必关心字符串中的位置,你肯定应该使用正则表达式。好的,你也可以检查这个数字是否正好有7位。。。但在第二个数字为7位的情况下,即使正则表达式也会失败。@mmika1000是的,完全同意我得到的转义序列无效。模式上的有效转义序列是\b\t\n\f\r\\\\\\\error.compile\d{7}只有一条注释-您可能需要用\b包围数字以匹配正好包含7位数字的数字:\\b\\d{7}\\yes,您需要将模式中的反斜杠转义为\\d{7}。很抱歉,我以为我已经编辑过了。我得到了一个无效的转义序列。有效的转义序列是\b\t\n\f\r\\\\\\\Pattern上的错误。编译\d{7}只需一条注释-您可能需要用\b包围数字以匹配正好包含7个数字的数字:\\b\\d{7}\\bYes,您需要将模式中的反斜杠转义为\\d{7}。对不起,我以为我是伊迪特 我已经知道了。