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

EditText中匹配指定值及查找最近值的代码实现方法

解决方案

首先先准备好指定的数值集合,为了高效完成后续的存在性检查和最接近值查找,建议用有序集合(比如TreeSet)或者先对数组做排序处理。

1. 判断输入值是否在指定集合中

核心步骤很直接:

  • 从EditText里取出输入文本,转成数字(注意处理空输入、非数字输入的异常情况)
  • 检查该数字是否存在于预定义的集合里

代码示例(Android Java)

// 预定义指定数值集合,用TreeSet实现有序存储
Set<Integer> targetNumbers = new TreeSet<>(Arrays.asList(420, 5430, 7420));

// 获取EditText输入并转换为数字
EditText inputEt = findViewById(R.id.input_edit_text);
String inputStr = inputEt.getText().toString().trim();
if (TextUtils.isEmpty(inputStr)) {
    Toast.makeText(this, "请输入有效数字", Toast.LENGTH_SHORT).show();
    return;
}
int inputNum;
try {
    inputNum = Integer.parseInt(inputStr);
} catch (NumberFormatException e) {
    Toast.makeText(this, "请输入正确的数字", Toast.LENGTH_SHORT).show();
    return;
}

// 判断是否存在
boolean isExist = targetNumbers.contains(inputNum);
if (isExist) {
    Toast.makeText(this, "输入值" + inputNum + "在指定集合中", Toast.LENGTH_SHORT).show();
} else {
    // 不存在则执行找最接近值的逻辑
    int closestNum = findClosestNumber(targetNumbers, inputNum);
    Toast.makeText(this, "最接近的数值是" + closestNum, Toast.LENGTH_SHORT).show();
}

2. 查找与输入值最接近的指定数值

借助TreeSet的两个方法可以快速定位候选值:

  • floor(inputNum):返回集合里小于等于输入值的最大数
  • ceiling(inputNum):返回集合里大于等于输入值的最小数
    之后对比这两个候选值和输入值的差值,选差值更小的那个;如果其中一个不存在(比如输入值比所有集合值都小/大),直接取存在的那个即可。

查找最接近值的方法实现

private int findClosestNumber(Set<Integer> targetNumbers, int inputNum) {
    TreeSet<Integer> treeSet = (TreeSet<Integer>) targetNumbers;
    Integer floorNum = treeSet.floor(inputNum);
    Integer ceilingNum = treeSet.ceiling(inputNum);

    // 输入值比所有数都小
    if (floorNum == null) {
        return ceilingNum;
    }
    // 输入值比所有数都大
    if (ceilingNum == null) {
        return floorNum;
    }

    // 比较差值,返回更接近的数值
    int diffFloor = inputNum - floorNum;
    int diffCeiling = ceilingNum - inputNum;
    return diffFloor <= diffCeiling ? floorNum : ceilingNum;
}

补充说明

  • 要是不想用TreeSet,也可以把数值存入数组后先排序,再用二分查找判断存在性,同时通过二分查找的定位结果确定相邻候选值,逻辑和上面一致。
  • 如果需要处理浮点数,只需把代码里的Integer换成Double,parseInt换成parseDouble就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:22:23