簡體   English   中英

使用數字字符串時,Java split()的結果會有所不同

[英]Result of Java split() is varies when working with string of numbers

為什么Java String.split()在處理代碼中定義的字符串與涉及數字時從文件讀取的字符串時會產生不同的結果? 具體來說,我有一個名為“test.txt”的文件,其中包含以空格分隔的字符和數字:

G H 5 4

split方法不會按預期在空格上拆分。 但是如果在代碼中創建一個字符串變量,其中相同的字符和數字用空格分隔,則split()的結果是四個單獨的字符串,一個用於char和number。 下面的代碼演示了這種差異:

   import java.io.File;
   import java.io.FileReader;
   import java.io.BufferedReader;

   public class SplitNumber {

     //Read first line of text file
     public static void main(String[] args) {
       try {
         File file = new File("test.txt");
         FileReader fr = new FileReader(file);
         BufferedReader bufferedReader = new BufferedReader(fr);

         String firstLine;
         if ((firstLine = bufferedReader.readLine()) != null) {
           String[] firstLineNumbers = firstLine.split("\\s+");
           System.out.println("First line array length: " + firstLineNumbers.length);

           for (int i=0; i<firstLineNumbers.length; i++) {
             System.out.println(firstLineNumbers[i]);
           }
         }
         bufferedReader.close();

         String numberString = "G H 5 4";
         String[] numbers = numberString.split("\\s+");
         System.out.println("Numbers array length: " + numbers.length);

         for (int i=0; i<numbers.length; i++) {
           System.out.println(numbers[i]);
         }
       } catch(Exception exception) {
         System.out.println("IOException occured");
         exception.printStackTrace();
       }
     }
   }

結果是:

First line array length: 3
G
H
5 4
Numbers array length: 4
G
H
5
4

為什么文件中的數字不會被解析為與代碼中定義的相同字符串相同?

根據反饋,我將正則表達式更改為split("[\\\\s\\\\h]+") ,這解決了問題; 文件的數字被正確分割,這清楚地表明我在我正在使用的文本文件中有一個不同的類似空格的字符。 然后我替換了文件的內容(使用記事本)並恢復為split("\\\\s+")並發現它這次正常工作。 所以在某些時候我必須在文件中引入不同的空白字符(可能是復制/粘貼問題)。 最后帶走的是我應該使用split("[\\\\s\\\\h]+")從我想要在空格上分割的文件中讀取,因為它將涵蓋可能不會立即明顯的更多場景。

感謝所有幫助我找到問題的根本原因。

暫無
暫無

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

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