我正在使用Scanner从控制台获取输入。预期的输入格式为CR127-0772。我想从该输入中提取3个不同的值:第一个是字符串' CR'第二个是127,第三个是0072。 这可以使用scanf
在C中执行scanf("%s%d-%d", &st, &a, &b)
如何使用java执行相同的任务?我不知道如何使用正则表达式与扫描仪。 非常感谢您的帮助。
答案 0 :(得分:0)
您可以将其扫描为字符串,然后将变量设置为该字符串的子字符串(根据需要解析为int)。
String s = scanner.nextLine();
String st = s.substring(0,2);
int a = Integer.parseInt(s.substring(2,5));
int b = Integer.parseInt(s.substring(6));
这假设字符串总是两个字符,第一个int总是三个数字。第二个int可以任意长。
答案 1 :(得分:0)
首先,Java 无法这样做,因为java不使用指针。你可以期待的最好的方法是返回一个列表/值数组。
其次,“不”; JDK中没有类似的东西可以做到这一点。
但是,您可以在与变量一样多的代码行中轻松完成:
String input = "CR127-0772"; // given this got from console
String st = input.replaceAll("\\d.*", ""); // delete from 1st digit onwards
String a = input.replaceAll("^\\D+|-.*", ""); // delete leading non-digits or dash onwards
String b = input.replaceAll(".*-", ""); // delete everything up to a dash
这使用正则表达式来匹配不想要的内容,并通过替换为空白来“删除”它。
答案 2 :(得分:0)
使用Scanner
是不可能的,因为此类适用于单个分隔符。你应该在这里做的是手动解析String
所需的格式。
以下是如何执行此操作的示例:
String data = scanner.nextLine();
String stringPart = data.replaceAll("[^a-zA-Z]", ""); //remove all non letter chars
int[] numbers = Arrays.stream( //convert to Stream the result of
data.replaceAll("[a-zA-Z]", "") // remove all letter chars
.split("-") // and split by "-"
).mapToInt(Integer::parseInt) //map the array of String to a stream of int (not Integer)
.toArray(); //convert the stream into an array int[]