Java 如何返回字符串中第一个罗马数字的索引
这是我的第一个问题,我是Java编码的初学者,我有一个关于这个主题的问题 如果有一个字符串s包含一个罗马数字(i,v,x,l,c,d,m),程序的任务是返回第一个出现的罗马数字的索引。。。例如,名为“civil”的字符串将返回0,因为c是第一个罗马数字,其索引为0 我熟悉string indexOf()方法,并尝试将其设置为: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
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
中的每个项目中,该数组是我们定义程序应该查找的所有可能字母的数组