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

Java新手求助:如何返回字符串中首个罗马数字的索引

嘿,作为Java新手能想到用indexOf()已经很棒啦!咱们一步步来解决这个问题~

解决思路

首先,咱们得明确目标:找到字符串里第一个属于罗马数字(i、v、x、l、c、d、m,也可以考虑大小写哦)的字符,返回它的索引。核心思路就是逐个检查字符串里的每个字符,看它是不是罗马数字,找到第一个符合的就停。

实现方案

我给你准备了两种简单易上手的方法,都很适合新手理解:

方法一:逐个遍历检查(最直观)

这是最容易看懂的写法,完全贴合你的思路:

public class FirstRomanIndex {
    public static void main(String[] args) {
        String s = "civil";
        int result = findFirstRomanIndex(s);
        System.out.println(result); // 输出0,和你的例子一致
    }

    public static int findFirstRomanIndex(String s) {
        // 把所有罗马数字(大小写都包含)放进一个字符串里,方便判断
        String romanChars = "ivxlcdmIVXLCDM";
        
        // 遍历字符串的每个字符
        for (int i = 0; i < s.length(); i++) {
            char current = s.charAt(i);
            // 用indexOf判断当前字符是不是罗马数字:如果返回不是-1,说明存在
            if (romanChars.indexOf(current) != -1) {
                return i; // 找到第一个就立刻返回索引,不用继续遍历啦
            }
        }
        return -1; // 如果整个字符串都没找到罗马数字,返回-1表示不存在
    }
}

代码拆解:

  1. 先定义romanChars字符串,把所有罗马数字(大小写)都放进去,这样用indexOf()就能快速判断字符是否属于罗马数字集合。
  2. 用for循环逐个取出字符串里的字符,索引从0开始。
  3. 一旦找到符合条件的字符,直接返回当前索引——因为我们要的是首个出现的,所以不用再继续循环了。
  4. 要是遍历完都没找到,就返回-1,这是Java里常用的“未找到”标记。

方法二:用Stream API简化写法(Java 8+)

如果想试试更简洁的代码,Java 8之后的Stream API可以帮你一行搞定查找逻辑:

import java.util.OptionalInt;

public class FirstRomanIndexStream {
    public static void main(String[] args) {
        String s = "civil";
        OptionalInt result = findFirstRomanIndex(s);
        // 存在就输出索引,不存在就输出-1
        System.out.println(result.orElse(-1)); // 同样输出0
    }

    public static OptionalInt findFirstRomanIndex(String s) {
        String romanChars = "ivxlcdmIVXLCDM";
        return s.chars()
                .filter(c -> romanChars.indexOf(c) != -1) // 筛选罗马数字字符
                .findFirst(); // 取第一个符合条件的
    }
}

代码拆解:

  1. s.chars()把字符串转换成字符的数字流(每个字符对应它的ASCII码值)。
  2. filter方法像个筛子,只留下属于罗马数字的字符。
  3. findFirst()返回第一个符合条件的结果,用OptionalInt包装,这样可以优雅地处理“没找到”的情况,避免空指针问题。
小提示
  • 如果你只需要处理小写的罗马数字,把romanChars改成"ivxlcdm"就可以啦,完全适配你的例子。
  • 如果担心输入字符串是空的,可以在方法开头加个判断:if (s == null || s.isEmpty()) return -1;,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:05:43