引号内部的分开讨论
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String str = scanner.nextLine();
List<String> result = function(str);
System.out.println(result.size());
for (String ss : result) {
System.out.println(ss);
}
}
}
public static List<String> function(String str) {
ArrayList<String> list = new ArrayList<>();
if (!str.contains("\"")) {
for (String jj : str.split(" ")) {
list.add(jj);
}
return list;
}
boolean isInner = false;
int start = str.indexOf("\"");
if (start == 0) {
start += 1 ;
isInner = true;
}
find(str, list, isInner, start);
return list;
}
public static void find(String str, List<String> list, boolean isInner, int start) {
if (start + 1 > str.length()) {
return;
}
if (start > str.lastIndexOf("\"")) {
String latsString = new String(str.substring(start + 1, str.length()));
if (latsString.length() > 0 && !latsString.equals(" ")) {
for (String ss : latsString.split(" ")) {
list.add(ss);
}
}
return;
}
boolean isInn = isInner;
if (isInn) { // 判断内容是否在" " 里面
int nextInn = str.indexOf("\"", start + 1);
list.add(new String(str.substring(start, nextInn)));
isInn = false;
find(str, list, isInn, nextInn + 1);
} else {
String strOut = null;
int nextOut = start;
if (start == str.indexOf("\"")) {
strOut = new String(str.substring(0, start));
} else {
nextOut = str.indexOf("\"", start + 1);
strOut = new String(str.substring(start + 1, nextOut));
}
if (strOut.length() > 0 && !strOut.equals(" ")) {
String[] tt = strOut.split(" ");
for (String t : tt) {
list.add(t);
}
}
isInn = true;
find(str, list, isInn, nextOut + 1);
}
}
}

京公网安备 11010502036488号