我有一个字符串,我想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中做同样的事情?
答案 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