如何用Java拆分.txt文件中混合的Integer、浮点数与Strings?
帮你解决文本内容拆分与类型识别的问题
嘿,作为刚入门的编程新手,碰到这种拆分+识别的问题太正常啦!先给你提个小细节:你老师给的代码里有个小笔误——in. while应该改成while,不然程序会报错哦。
接下来咱们一步步解决核心问题:拆分文本内容然后识别类型。
第一步:拆分文本行
通常文本里的不同元素是用空白字符(空格、制表符等)分隔的,咱们可以用String.split("\\s+")来把每行拆分成单个元素的数组,这个表达式能匹配一个或多个空白字符,处理起来更灵活。
第二步:识别每个元素的类型
咱们可以写几个辅助方法来判断元素是整数、浮点数还是字符串:
- 尝试把元素转成整数,如果成功就是Integer类型;
- 如果转整数失败,再尝试转浮点数,成功就是Floating point类型;
- 要是都失败,那就是String类型。
修改后的完整代码
import java.io.BufferedReader; import java.io.InputStreamReader; public class Trabalho { public static void main(String[] args) { ler(); } public static void ler() { try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line; // 修正笔误:去掉多余的in. while ((line = in.readLine()) != null) { tratar(line); } in.close(); } catch (Exception e) { // 新增异常输出,方便你调试找问题 e.printStackTrace(); } } public static void tratar(String text) { // 按一个或多个空白字符拆分当前行的内容 String[] elements = text.split("\\s+"); for (String element : elements) { // 逐个判断元素类型并输出 if (isInteger(element)) { System.out.println("Integer: " + element); } else if (isFloatingPoint(element)) { System.out.println("Floating point: " + element); } else { System.out.println("String: " + element); } } } // 辅助方法:判断是否为整数 private static boolean isInteger(String element) { try { Integer.parseInt(element); return true; } catch (NumberFormatException e) { return false; } } // 辅助方法:判断是否为浮点数(排除整数情况) private static boolean isFloatingPoint(String element) { try { Double.parseDouble(element); // 避免把"123"这类整数误判成浮点数 return !isInteger(element); } catch (NumberFormatException e) { return false; } } }
额外小提示
- 如果你的文本里有带引号的字符串(比如
"hello world"),上面的拆分方式就不适用了——因为空格会被当成分隔符拆分引号里的内容,这种情况需要更复杂的逻辑,要是你碰到了可以再细化需求哦; - 代码里的异常打印能帮你快速定位问题,比如输入格式不对时,能看到具体的错误原因。
内容的提问来源于stack exchange,提问作者user9772072
相关产品推荐
相关产品推荐

