引号内部的分开讨论
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); } } }