Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何返回字符串中第一个罗马数字的索引_Java - Fatal编程技术网

Java 如何返回字符串中第一个罗马数字的索引

Java 如何返回字符串中第一个罗马数字的索引,java,Java,这是我的第一个问题,我是Java编码的初学者,我有一个关于这个主题的问题 如果有一个字符串s包含一个罗马数字(i,v,x,l,c,d,m),程序的任务是返回第一个出现的罗马数字的索引。。。例如,名为“civil”的字符串将返回0,因为c是第一个罗马数字,其索引为0 我熟悉string indexOf()方法,并尝试将其设置为: int indexc = s.indexOf('c'); int indexi = s.indexOf('i'); int

这是我的第一个问题,我是Java编码的初学者,我有一个关于这个主题的问题

如果有一个字符串s包含一个罗马数字(i,v,x,l,c,d,m),程序的任务是返回第一个出现的罗马数字的索引。。。例如,名为“civil”的字符串将返回0,因为c是第一个罗马数字,其索引为0

我熟悉string indexOf()方法,并尝试将其设置为:

        int indexc = s.indexOf('c');
        int indexi = s.indexOf('i');
        int indexv = s.indexOf('v');
        int indexl = s.indexOf('l');
        int indexx = s.indexOf('x');
        int indexd = s.indexOf('d');
        int indexm = s.indexOf('m');
        if (indexc >= 0) {
            return indexc;
        } if (indexi >= 0) {
            return indexi;
        } if (indexv >= 0) {
            return indexv;
        } if (indexl >= 0) {
            return indexl;
        } if (indexx >= 0) {
            return indexx;
        } if (indexd >= 0) {
            return indexd;
        } if (indexm >= 0) {
            return indexm;
        } else {
           return -1;
        }

但我不确定这是否应该发生。有什么想法吗?

由于篇幅和可读性,你的答案相当复杂。此外,对于与您编写的字符串顺序不同的字符串(例如“ic”),您的答案将不正确:您的代码将返回“1”,因为您的代码首先检查是否存在“c”,然后返回“c”,并且不会同时检查所有罗马数字

因此,我写了一个不同的答案,应该是一个简单的答案。此代码段检查字符串的每个索引,如果它是所需的字符之一,则停止并返回该索引

static int findRomanI(String s){
    for(int i = 0 ; i < s.length() ;i++){
        if(s.charAt(i) == 'i' || 
            s.charAt(i) == 'v' ||
            s.charAt(i) == 'x' ||
            s.charAt(i) == 'l' || 
            s.charAt(i) == 'c' || 
            s.charAt(i) == 'd' || 
            s.charAt(i) == 'm')
            return i;
    }
    return -1;
}
static int findRomanI(字符串s){
对于(int i=0;i
使用正则表达式可以最好地做到这一点:

 Matcher matcher = Pattern.compile("[ivxlcdm]").matcher(s);
 int index = matcher.find() ? matcher.start() : -1;

您的代码正在查找每个字符,并按您希望返回的顺序返回,即先返回
c
,然后返回
i
,依此类推

您可以这样做:

public class IndexOfRomanChar {
    private static final char[] ROMAN_CHARS = {'i', 'v', 'x', 'l', 'c', 'd', 'm'};

    public static void main(String[] args) {
        String word = "civil";

        System.out.println(getIndexOfRomanChar(word));
    }

    private static int getIndexOfRomanChar(String word) {
        for (int i = 0; i < word.length(); i++) {
            for (char c : ROMAN_CHARS) {
                if (word.charAt(i) == c) {
                    return i;
                }
            }
        }
        return -1;
    }
}
公共类IndexOfRomanChar{
私有静态final char[]罗马字符={'i','v','x','l','c','d','m'};
公共静态void main(字符串[]args){
字符串word=“civil”;
System.out.println(getIndexOfRomanChar(word));
}
私有静态int getIndexOfRomanChar(字符串字){
for(int i=0;i
这段代码首先遍历单词的每个字母,并检查它是否包含在
ROMAN_CHARS
中的每个项目中,该数组是我们定义程序应该查找的所有可能字母的数组