第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用緩沖閱讀器讀取沒有換行符的文件

使用緩沖閱讀器讀取沒有換行符的文件

繁花不似錦 2022-06-15 10:10:39
我正在讀取一個(gè)帶有逗號(hào)分隔值的文件,當(dāng)拆分為一個(gè)數(shù)組時(shí),每行將有 10 個(gè)值。我希望文件有換行符,這樣line = bReader.readLine()會(huì)給我每一行。但是我的文件沒有換行符。相反,在第一組值之后有很多空格(準(zhǔn)確地說是 465),然后下一行開始。所以我上面的 readLine() 代碼是一次性讀取整個(gè)文件,因?yàn)闆]有換行符。請(qǐng)建議如何最好地有效地解決這種情況。
查看完整描述

4 回答

?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

一種方法是在迭代讀取之前用換行符“\n”替換文本中的 465 個(gè)空格。



查看完整回答
反對(duì) 回復(fù) 2022-06-15
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

我支持 Ninan 的回答:用換行符替換 465 個(gè)空格,然后運(yùn)行您之前計(jì)劃運(yùn)行的功能。


為了美觀和可讀性,我建議使用 Regex 的 Pattern 來替換空格而不是 long unreadable String.replace("                         ")。


您的代碼可能如下所示,但將 6 替換為 465:


 // arguments are passed using the text field below this editor

  public static void main(String[] args)

  {

    String content = "DOG,CAT      MOUSE,CHEESE";

    Pattern p = Pattern.compile("[ ]{6}",

            Pattern.DOTALL | Pattern.CASE_INSENSITIVE);

    String newString = p.matcher(content).replaceAll("\n");

    System.out.println(newString); 

  }


查看完整回答
反對(duì) 回復(fù) 2022-06-15
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

我的理解是你有一個(gè)沒有正確換行符的平面 CSV 文件,每行應(yīng)該有 10 個(gè)值。


更新:1.(推薦)假設(shè)您嘗試存儲(chǔ)一行中的 10 個(gè)值,您可以使用帶有 useDelimiter 的 Scanner 類來有效地解析 csv:


    public static void parseCsvWithScanner() throws IOException {


    Scanner scanner = new Scanner(new File("test.csv"));


    // set your delimiter for scanner, "," for csv

    scanner.useDelimiter(",");


    // storing 10 values as a "line"

    int LINE_LIMIT = 10;


    // implement your own data structure to store each value of CSV

    int[] tempLineArray = new int[LINE_LIMIT];


    int lineBreakCount = 0;


    while(scanner.hasNext()) {


        // trim start and end spaces if there is any

        String temp = scanner.next().trim();

        tempLineArray[lineBreakCount++] = Integer.parseInt(temp);


        if (lineBreakCount == LINE_LIMIT) {


            // replace your own logic for handling the full array

            for(int i=0; i<tempLineArray.length; i++) {

                System.out.print(tempLineArray[i]);

            } // end replace


            // resetting array and counter

            tempLineArray = new int[LINE_LIMIT];

            lineBreakCount = 0;

        }

    }

    scanner.close();

}

或者使用 BufferedReader。如果通過替換您自己的邏輯存在內(nèi)存問題,您可能不需要 ArrayList 來存儲(chǔ)所有值。


public static void parseCsv() throws IOException {

    BufferedReader br = new BufferedReader(new FileReader(file));

    // your delimiter

    char TOKEN = ',';

    // your requirement of storing 10 values for each "line"

    int LINE_LIMIT = 10;

    // tmp for storing from BufferedReader.read()

    int tmp;

    // a counter for line break

    int lineBreakCount = 0;

    // array for storing 10 values, assuming the values of CSV are integers

    int[] tempArray = new int[LINE_LIMIT];

    // storing tempArray of each line to ArrayList

    ArrayList<int[]> lineList = new ArrayList<>();

    StringBuilder sb = new StringBuilder();


    while((tmp = br.read()) != -1) {

        if ((char)tmp == TOKEN) {

            if (lineBreakCount == LINE_LIMIT) {

                // your logic to handle the current "line" here.

                lineList.add(tempArray);

                // new "line"

                tempArray = new int[LINE_LIMIT];

                lineBreakCount = 0;

            }

            // storing current value from buffer with trim of spaces

            tempArray[lineBreakCount] =

                    Integer.parseInt(sb.toString().trim());

            lineBreakCount++;

            // clear the buffer

            sb.delete(0, sb.length());

        }

        else {

            // add current char from BufferedReader if not delimiter

            sb.append((char)tmp);

        }

    }

    br.close();

}


查看完整回答
反對(duì) 回復(fù) 2022-06-15
?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊

我的建議是讀取文件 f1.txt 并通過刪除所有空行和空格寫入花藥文件 f2.txt 然后讀取 f2.txt 之類的東西


FileReader fr = new FileReader("f1.txt"); 

BufferedReader br = new BufferedReader(fr); 

FileWriter fw = new FileWriter("f2.txt"); 

String line;


 while((line = br.readLine()) != null)

line = line.trim(); // remove leading and trailing whitespace

if (!line.equals("")) // don't write out blank lines

{

    fw.write(line, 0, line.length());

}

}


然后嘗試使用您的代碼。


查看完整回答
反對(duì) 回復(fù) 2022-06-15
  • 4 回答
  • 0 關(guān)注
  • 110 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)