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

Java程序扫描JSONObject时出现Scanner无限循环问题求助

解决你的Scanner无限循环与JSONObject构建问题

嘿,我一眼就抓到问题所在了——你的Scanner陷入无限循环,根本走不到构建JSONObject的步骤,咱们一步步来搞定:

为什么会无限循环?

你用scanner.hasNext()作为while循环的判断条件,这个方法的特性是会一直阻塞,等待新的输入内容,除非系统收到EOF信号(Windows按Ctrl+Z,Linux/macOS按Ctrl+D),不然程序会永远卡在循环里,根本执行不到后面的JSONObject代码。

解决方案1:读取单行输入(最常用场景)

如果你的需求是读取用户输入的一行完整内容(比如一个合法的JSON字符串),直接用scanner.nextLine()替代循环就行,用户按回车就会结束输入,修改后的完整代码如下:

package com.readvalues.main;
import java.util.Scanner;
import net.sf.json.JSONObject;

public class ReadValues {
    public static void main(String[] args) {
        try {
            System.out.println("Enter the data (输入完整JSON后按回车):");
            Scanner scanner = new Scanner(System.in);
            
            // 读取一行输入,直接结束输入流程
            String input = scanner.nextLine();
            
            // 构建并打印JSONObject
            JSONObject jsonObject = JSONObject.fromObject(input);
            System.out.println("解析后的JSON对象:");
            System.out.println(jsonObject.toString(4)); // 带缩进的美观输出
            
            scanner.close(); // 记得关闭Scanner释放资源
        } catch (Exception e) {
            System.err.println("处理出错:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

解决方案2:带终止条件的多输入拼接

如果你的需求是读取多个输入片段(比如空格分隔的内容),直到用户触发终止指令,可以给循环加个终止条件,比如输入"exit"就停止:

package com.readvalues.main;
import java.util.Scanner;
import net.sf.json.JSONObject;

public class ReadValues {
    public static void main(String[] args) {
        // 用StringBuilder代替字符串拼接,提升效率
        StringBuilder inputBuilder = new StringBuilder();
        try {
            System.out.println("Enter the data (输入exit结束):");
            Scanner scanner = new Scanner(System.in);
            
            while (scanner.hasNext()) {
                String part = scanner.next();
                // 触发终止条件
                if ("exit".equalsIgnoreCase(part)) {
                    break;
                }
                inputBuilder.append(part);
            }
            
            JSONObject jsonObject = JSONObject.fromObject(inputBuilder.toString());
            System.out.println("解析后的JSON对象:");
            System.out.println(jsonObject.toString(4));
            
            scanner.close();
        } catch (Exception e) {
            System.err.println("处理出错:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

额外小提示

  • 你原来的x = x + scanner.next()字符串拼接方式效率很低,尤其是输入内容多的时候,用StringBuilder会更高效;
  • net.sf.json是比较老旧的JSON处理库,如果是新项目,更推荐使用Jackson、Gson这类主流库,兼容性和功能都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:17