簡體   English   中英

如何使用Scanner拆分空格作為分隔符的字符串

[英]How to split a string with space being the delimiter using Scanner

我試圖根據單詞之間的空格分割輸入句子。 它沒有按預期工作。

public static void main(String[] args) {
    Scanner scaninput=new Scanner(System.in);
    String inputSentence = scaninput.next();
    String[] result=inputSentence.split("-");
    // for(String iter:result) {
    //     System.out.println("iter:"+iter);
    // }
    System.out.println("result.length: "+result.length);
    for (int count=0;count<result.length;count++) {
        System.out.println("==");
        System.out.println(result[count]);
    }
}

當我在split中使用“ - ”時,它給出了下面的輸出:

fsfdsfsd-second-third
result.length: 3
==
fsfdsfsd
==
second
==
third

當我用空格“”替換“ - ”時,它給出了下面的輸出。

first second third
result.length: 1
==
first

關於這里有什么問題的任何建議? 我已經提到了stackoverflow post 如何按空格分割字符串 ,但它不起作用。

使用split("\\\\s+")給出了這個輸出:

first second third
result.length: 1
==
first

更改

scanner.next()

scanner.nextLine()

來自javadoc

掃描程序使用分隔符模式將其輸入分解為標記,分隔符模式默認匹配空格。

調用next()返回下一個單詞
調用nextLine()返回下一

Scannernext()方法已經在空格上拆分字符串,也就是說,它返回下一個標記,字符串直到下一個字符串。 因此,如果添加適當的println ,您將看到inputSentence等於第一個單詞,而不是整個字符串。

scanInput.next()替換scanInput.next() scanInput.nextLine()

問題是, scaninput.next()將只讀取,直到第一個空格字符,所以它只是在單詞拉動first 所以之后的split什么都沒有完成。

我建議使用java.io.BufferedReader ,而不是使用Scanner ,它可以讓你一次讀取整行

另一種選擇是使用運行良好的緩沖Reader類。

String inputSentence;

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            inputSentence=br.readLine();

            String[] result=inputSentence.split("\\s+");
rintln("result.length: "+result.length);

            for(int count=0;count<result.length;count++)
            {
                System.out.println("==");
                System.out.println(result[count]);
            }

        }

使用src.split("\\\\s+"); 而不是inputSentence.split("-");

它在每個\\\\s上分裂,代表每個非空白字符 如果元素位於該分隔符之前,之間和之后,則結果為數組

以下是您需要的完整示例。

示例:

public class StringSplit {
    public static void main(String[] args) 
    {
        String src = "first second third";
        String[] stringArray = src.split("\\s+");

        System.out.println(stringArray[0]);
        System.out.println(stringArray[1]);
        System.out.println(stringArray[2]);
    }
}

有關split(“\\ s +”)如何工作的詳細信息,請參閱blow stackoverflow post。

當提供正則表達式時,Java中的String.split()方法究竟是如何工作的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM