如何在Java中使用“sscanf”? [重复]

问题描述 投票:-1回答:2

我有一个字符串,我想a)检查它是否与以下格式匹配,b)将数字和文本提取到变量中:

"x:x:x - some text" // x = some integer number

在,C,我会用:

sscanf(str1, "%d:%d:%d - %s\n", &x, &y,&z, str2);

我如何在Java中做同样的事情?

java scanf
2个回答
1
投票

你的意思是 :

String text = "1:99:33 - some text";
boolean check = text.matches("\\d+:\\d+:\\d+ - .*");
System.out.println(check);

如果你想匹配完全(一个数字):(两个数字):(两个数字)你可以使用\\d:\\d{2}:\\d{2}而不是\\d+:\\d+:\\d+

细节

  • \\d+匹配一个或多个数字
  • :文字字符
  • \\d+匹配一个或多个数字
  • :文字字符
  • \\d+匹配一个或多个数字
  • -一个空间连字符一个空格
  • .*零个或多个任何角色

...如何从字符串中提取数字和文本?

如果您使用的是Java 8,则可以拆分输入,第一个输入返回数字由:分隔,第二个是您想要的文本,因此要提取数字,您需要再次通过:拆分第一个输入然后迭代它们并且将每个转换为整数,如下所示:

String input = "1:99:33 - some text";
String[] split = input.split(" - ");//Split using space hyphen space
String text = split[1];//this will return "some text"
List<Integer> numbers = Arrays.asList(split[0].split(":")).stream()
        .map(stringNumber -> Integer.parseInt(stringNumber))
        .collect(Collectors.toList());// this will return list of number [1, 99, 33]

0
投票

替代解决方案:

String input = "1:99:33 - some text";
    StringTokenizer st = new StringTokenizer(input, ":");

    while (st.hasMoreTokens()) {
        String token = st.nextToken();
        System.out.println(token);
    }

StringTokenizer将字符串分解为标记。其中“:”是令牌分隔符。输出:

1
99
33 - some text
© www.soinside.com 2019 - 2024. All rights reserved.