You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java priceReader方法功能异常排查及读取文件返回字符串的替代方案咨询

嘿,我一眼就发现你的问题所在了——你的方法返回初始空字符串,核心原因是字符串比较用错了方式!

原代码的问题

在Java里,==用来比较字符串时,判断的是两个字符串对象的内存引用是否相同,而不是它们的内容是否一致。哪怕clotheOrder和clotheCode的文本内容完全一样,只要不是同一个对象实例,clotheOrder == clotheCode就会返回false,导致price永远不会被赋值,最后只能返回初始的空字符串。

修复后的方法

只需要把比较逻辑改成用equals()方法(比较内容)就可以了,如果担心clotheOrder可能为null导致空指针,还可以用clotheCode.equals(clotheOrder)或者Objects.equals(clotheOrder, clotheCode)来避免:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Objects;
import java.util.Scanner;

public static String priceReader(String clotheOrder) { 
    String price = ""; 
    try { 
        File file = new File("src\\application\\clotheprice.txt"); 
        Scanner scan = new Scanner(file); 
        while (scan.hasNext()) { 
            String clotheCode = scan.next(); 
            String clothePrice = scan.next(); 
            String clotheStocks = scan.next(); 
            // 改用equals比较内容,或者用Objects.equals避免空指针
            if (Objects.equals(clotheOrder, clotheCode)) { 
                price = clothePrice;
                // 找到匹配项后可以直接跳出循环,提升效率
                break;
            } 
        } 
        scan.close(); 
    } catch (FileNotFoundException e) { 
        System.out.println("Error occured."); 
        e.printStackTrace(); 
    } 
    return price; 
}

另外加了个break,找到匹配项后就不用继续遍历文件了,能提升一点效率。


其他读取文件并返回目标字符串的实现方式

如果想换一种写法,这里给你几种常用的原生Java实现:

1. 使用BufferedReader逐行读取

适合处理较大的文件,逐行读取内存占用更低:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public static String priceReaderWithBufferedReader(String clotheOrder) {
    String price = "";
    String line;
    try (BufferedReader br = new BufferedReader(new FileReader("src\\application\\clotheprice.txt"))) {
        while ((line = br.readLine()) != null) {
            // 按空格分割每行的内容
            String[] parts = line.split("\\s+");
            if (parts.length >= 3 && Objects.equals(clotheOrder, parts[0])) {
                price = parts[1];
                break;
            }
        }
    } catch (IOException e) {
        System.out.println("Error occurred.");
        e.printStackTrace();
    }
    return price;
}

2. 使用Java 7+的Files类读取整个文件(适合小文件)

如果你的文件不大,可以一次性把整个文件读入内存,再处理:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.List;

public static String priceReaderWithFiles(String clotheOrder) {
    String price = "";
    try {
        List<String> lines = Files.readAllLines(Paths.get("src\\application\\clotheprice.txt"));
        for (String line : lines) {
            String[] parts = line.split("\\s+");
            if (parts.length >= 3 && Objects.equals(clotheOrder, parts[0])) {
                price = parts[1];
                break;
            }
        }
    } catch (IOException e) {
        System.out.println("Error occurred.");
        e.printStackTrace();
    }
    return price;
}

3. 使用Scanner按行读取(更灵活的分隔方式)

如果你的文件每行是一条记录,也可以让Scanner按行读取,再分割处理:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Objects;

public static String priceReaderWithScannerLine(String clotheOrder) {
    String price = "";
    try (Scanner scan = new Scanner(new File("src\\application\\clotheprice.txt"))) {
        while (scan.hasNextLine()) {
            String[] parts = scan.nextLine().split("\\s+");
            if (parts.length >= 3 && Objects.equals(clotheOrder, parts[0])) {
                price = parts[1];
                break;
            }
        }
    } catch (FileNotFoundException e) {
        System.out.println("Error occurred.");
        e.printStackTrace();
    }
    return price;
}

内容的提问来源于stack exchange,提问作者Augustus Moran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:32:27