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表示不存在 } }
代码拆解:
- 先定义
romanChars字符串,把所有罗马数字(大小写)都放进去,这样用indexOf()就能快速判断字符是否属于罗马数字集合。 - 用
for循环逐个取出字符串里的字符,索引从0开始。 - 一旦找到符合条件的字符,直接返回当前索引——因为我们要的是首个出现的,所以不用再继续循环了。
- 要是遍历完都没找到,就返回-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(); // 取第一个符合条件的 } }
代码拆解:
s.chars()把字符串转换成字符的数字流(每个字符对应它的ASCII码值)。filter方法像个筛子,只留下属于罗马数字的字符。findFirst()返回第一个符合条件的结果,用OptionalInt包装,这样可以优雅地处理“没找到”的情况,避免空指针问题。
小提示
- 如果你只需要处理小写的罗马数字,把
romanChars改成"ivxlcdm"就可以啦,完全适配你的例子。 - 如果担心输入字符串是空的,可以在方法开头加个判断:
if (s == null || s.isEmpty()) return -1;,让代码更健壮。
内容的提问来源于stack exchange,提问作者Magz
相关产品推荐
相关产品推荐

