在 Java 中模拟 SQL shell 模拟器

我想用 Java 模拟一个模拟 SQL shell。我们的想法是我们键入一行文本并终止它,;然后按回车键,该行将打印回控制台。


这应该能够接受多行文本,一旦有一个;回车符,它应该打印出文本。


这是我的代码:


while(true){

      Scanner scanner = new Scanner(System.in).useDelimiter(";");

      StringBuilder builder = new StringBuilder();

      while(scanner.hasNextLine()){

         if(scanner.nextLine().endsWith(";")){

            builder.append(scanner.nextLine());

            break;

          }else{

            builder.append(scanner.nextLine());

          }


          }

            System.out.println(builder.toString());

        }

这是行不通的,因为它永远不会退出内部 while 循环。


神不在的星期二
浏览 148回答 2
2回答

精慕HU

仅供参考: nextLine()读取lines,而不是tokens,因此您的代码未使用定界符。您需要使用next()来读取标记,正如您现在意识到的那样,您需要一些条件来结束循环。结束 shell 的常用方法是exit命令。;由于您希望语句以回车符结尾,因此您需要为此调整分隔符。为了更宽松,在;(正则表达式:\h水平空白字符)之后允许空格,并匹配换行符,而不仅仅是回车符(正则表达式:\R任何 Unicode 换行符序列)。此外,您需要创建Scanner 外部任何循环。Scanner scanner = new Scanner(System.in).useDelimiter(";\\h*\\R");for (;;) {    System.out.print(">");    if (! scanner.hasNext())        break;    String stmt = scanner.next();    stmt = stmt.replaceAll("(?mU:^\\s+\\R)|(?U:\\s+$)", ""); // remove blank lines and trailing spaces    if (stmt.equals("exit"))        break;    System.out.println("Received command: " + stmt);}System.out.println("Done!");示例输出>test;Received command: test> This is amulti-line testwith blank lines          ;Received command:  This is amulti-line testwith blank lines>;Received command: >exit;Done!

HUH函数

为什么不检查每一行是否包含;?如果是,则附加相关值并跳出循环。while(true){            Scanner scanner = new Scanner(System.in);            StringBuilder builder = new StringBuilder();            while(scanner.hasNextLine()){                String line = scanner.nextLine();                if (line.contains(";"))                {                    String[] parts = line.split(";");                    if (parts.length > 0)                    {                        builder.append(parts[0] + ";");                    }                    else                    {                        builder.append(";");                    }                    break;                }                else                {                    builder.append(line);                }            }            System.out.println(builder.toString());        }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java