如何" sscanf"在Java?

时间:2017-12-24 07:15:31

标签: java scanf

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

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

In,C,我会用:

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

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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将字符串分解为标记。在哪里&#34;:&#34;是一个令牌分隔符。 输出:

1
99
33 - some text