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

IBM Host On Demand Macro(HAScript)报错:Scanner无hasNextInt方法

解决IBM Host On Demand Macro读取整数列表的问题

你遇到的报错核心原因是HAScript对Java类的方法支持有局限,java.util.Scanner的hasNextInt()方法不在它允许直接调用的范围内。换用更基础的Java IO类就能绕开这个问题,比如BufferedReader配合FileReader,下面给你具体的XML脚本示例:

<HAScript name="ReadIntegers" description="" timeout="60000" pausetime="300" promptall="true">
    <import>java.io.BufferedReader</import>
    <import>java.io.FileReader</import>
    <import>java.io.IOException</import>

    <vars>
        <!-- 替换成你的实际文件路径,Windows路径要转义反斜杠 -->
        <var name="filePath" type="STRING" value="C:\\your_folder\\integers.txt"/>
        <var name="currentLine" type="STRING"/>
        <var name="currentInt" type="INT"/>
        <var name="reader" type="OBJECT"/>
    </vars>

    <actions>
        <!-- 创建文件读取对象 -->
        <createobject objectname="reader" classname="java.io.BufferedReader">
            <arg>
                <createobject classname="java.io.FileReader">
                    <arg>%filePath%</arg>
                </createobject>
            </arg>
        </createobject>

        <!-- 循环读取文件每一行 -->
        <while condition="%reader.readLine() != null%">
            <assign to="currentLine" from="%reader.readLine()%"/>
            <!-- 将读取到的字符串转为整数(假设每行一个整数) -->
            <assign to="currentInt" from="Integer.parseInt(%currentLine%)"/>
            
            <!-- 这里替换成你要执行的对应操作 -->
            <message title="当前处理整数" value="%currentInt%"/>
            
        </while>

        <!-- 关闭文件流,避免资源泄漏 -->
        <try>
            <callobject objectname="reader" methodname="close"/>
        </try>
        <catch type="java.io.IOException">
            <message title="错误" value="关闭文件失败"/>
        </catch>
    </actions>
</HAScript>

额外调整说明

如果你的文本文件是空格分隔的整数(比如一行写多个:10 20 30),可以把读取逻辑改成这样:

<assign to="currentLine" from="%reader.readLine()%"/>
<!-- 按空格拆分字符串成数组 -->
<assign to="numArray" from="%currentLine.split(&quot; &quot;)%"/>
<!-- 遍历数组逐个转整数 -->
<forloop counter="i" start="0" end="%numArray.length - 1%" step="1">
    <assign to="currentInt" from="Integer.parseInt(%numArray[i]%)"/>
    <!-- 执行你的操作 -->
    <message title="当前处理整数" value="%currentInt%"/>
</forloop>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:22:13