亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中模擬 SQL shell 模擬器

在 Java 中模擬 SQL shell 模擬器

神不在的星期二 2023-06-14 14:30:56
我想用 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 循環。
查看完整描述

2 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

僅供參考: 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 a


multi-line test


with blank lines


          ;

Received command:  This is a

multi-line test

with blank lines

>

;

Received command: 

>exit;

Done!


查看完整回答
反對 回復 2023-06-14
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

為什么不檢查每一行是否包含;?如果是,則附加相關值并跳出循環。


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());

        }


查看完整回答
反對 回復 2023-06-14
  • 2 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號