文章目錄
- 🌹例子
- 🌺思路
- 🛸方法一
- ?報錯解決
- 🛸方法二
🌹例子
文本文件中有下面的數據
2-1-9-4-7-8
將文件中的數據進行排序,變成下面的數據
1-2-4-7-8-9
🌺思路
要對這些數據進行排序,可以采用以下思路:
讀取文本文件中的數據:首先需要讀取文本文件中的數據,并將其轉換為程序中的數據結構,如數組或列表,以便進行排序操作。
分割數據:將讀取到的字符串按照分隔符(這里是“-”)進行分割,得到各個數字的字符串表示。
轉換為數字并排序:將分割得到的字符串轉換為整數,并進行排序操作,可以使用常見的排序算法,如快速排序、歸并排序等。在Java中,可以使用Arrays.sort()方法對數組進行排序,或使用Collections.sort()方法對列表進行排序。
將排序后的數字連接為字符串:將排序后的數字重新連接為字符串,并在數字之間添加分隔符“-”,得到最終的排序結果。
將排序結果寫入文件:將排序后的結果寫入文件,完成整個排序過程。
🛸方法一
package org.Demo6;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;public class Demo1 {public static void main(String[] args) throws IOException {//讀取數據FileReader fr = new FileReader("E:\\a.txt");StringBuilder sb=new StringBuilder();int ch;while ((ch=fr.read())!=-1){sb.append((char)ch);}fr.close();//排序String str=sb.toString();String[] arrstr = str.split("-");ArrayList<Integer> list = new ArrayList<>();for (String s: arrstr){// 去除空白字符s = s.trim();if (!s.isEmpty()) {int i = Integer.parseInt(s);list.add(i);}
// int i=Integer.parseInt(s);
// list.add(i);}Collections.sort(list);//寫出數據FileWriter fw = new FileWriter("E:\\b.txt");for (int i=0;i<list.size();i++){if (i==list.size()-1){//最后一個元素fw.write(list.get(i)+"");}else {//非最后一個元素fw.write(list.get(i)+"-");}}fw.close();}
}
?報錯解決
根據報錯信息中提供的輸入字符串"8\n",可以看到字符串中包含了換行符"\n"。這可能是導致轉換失敗的原因。Integer.parseInt()方法只能將符合整數格式的字符串轉換為整數,當字符串中包含非數字字符時,會拋出NumberFormatException異常。
為了解決這個問題,你可以在轉換之前先去除字符串中的空白字符,包括換行符。可以使用String.trim()方法去除字符串兩端的空白字符
🛸方法二
package org.Demo6;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;public class Demo1 {public static void main(String[] args) throws IOException {//讀取數據FileReader fr = new FileReader("E:\\a.txt");StringBuilder sb = new StringBuilder();int ch;while ((ch = fr.read()) != -1) {sb.append((char) ch);}fr.close();System.out.println(sb);//排序Integer[] arr = Arrays.stream(sb.toString().split("-")).map(s -> s.trim()) //去掉首尾空格.map(Integer::parseInt).sorted().toArray(Integer[]::new);//寫出FileWriter fw = new FileWriter("E:\\b.txt");String s=Arrays.toString(arr).replace(", ","-");//tostring操作解釋后,是[1,2,4,7,8,9],帶有", "的,我們要把", "(逗號空格)替換為”-“//上一段代碼運行結束后是結果是帶有[]的,我們只需要把頭尾的[]去掉即可String result=s.substring(1,s.length()-1);fw.write(result);System.out.println(result);}}
在技術的道路上,我們不斷探索、不斷前行,不斷面對挑戰、不斷突破自我。科技的發展改變著世界,而我們作為技術人員,也在這個過程中書寫著自己的篇章。讓我們攜手并進,共同努力,開創美好的未來!愿我們在科技的征途上不斷奮進,創造出更加美好、更加智能的明天!