Как принять вход в ожидаемую форму в Java? - PullRequest
0 голосов
/ 05 июня 2019

Я хочу взять строковый ввод в

%d+%d

формат в Java. Как мне это сделать?

Я знаю, что могу сделать это с помощью метода string.split (). Но я чувствую, что это будет намного сложнее, если мне придется иметь дело с большим количеством строк ввода Как

%d+%d-%d

Я ищу решения, близкие к решению scanf для c.

Я пробовал это для% d +% d

Scanner scanner = new Scanner(System.in);
String str = scanner.next();
String first,second;
String[] arr = str.split("\\+");
first = arr[0];
second = arr[1];
scanner.close();

И это для% d +% d-% d +% d .......... =% d-% d +% d ..... +% d ...

private final String[] splitLoL(String txt) {
        LinkedList<String> strList1 = new LinkedList<String>();
        LinkedList<String> strList2 = new LinkedList<String>();
        LinkedList<String> strList3 = new LinkedList<String>();;
        strList1.addAll(Arrays.asList(txt.split("\\+")));

        for(String str : strList1) {
            String[] proxy = str.split("-");
            strList2.addAll(Arrays.asList(proxy));
        }
        for(String str : strList2) {
            String[] proxy = str.split("=");
            strList3.addAll(Arrays.asList(proxy));
        }
        String[] strArr = new String[strList3.size()];
        for(int i = 0; i < strArr.length; i++) {
            strArr[i] = new String(strList3.get(i));
        }
        return strArr;
    }

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Или вы можете сделать следующее, используя JDK 9 +:

import java.util.Scanner;

public class ScannerTrial {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(" 4   z zz   ggg 22  e");

        scanner.findAll("\\d+").forEach((e) -> System.out.println(e.group()));
    }
}

Это напечатало бы

4 22 * ​​1007 *

0 голосов
/ 05 июня 2019

Попробуйте это:

String str = scanner.nextLine();
List<String> str2 = new ArrayList();
Matcher m = Pattern.compile("\\d+").matcher(str);
while(m.find()) {
  str2.add(m.group());   
}
...