can you count the letter "a" in:
q: как преобразовать римские цифры в арабские на java? как преобразовать римские цифры в арабские на java чтобы в дальнейшем выполнять с ними простейшие арифметические действия?

a: делюсь из своих закромов - уже не помню для чего писал (наверное был какой-то тест, видимо условие было не использовать коллекции типа map, оттуда и возник дихотомический поиск):
public class roman2arabic {
    private static int[] intervals={0, 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
    private static string[] numerals={"", "i", "iv", "v", "ix", "x", "xl", "l", "xc", "c", "cd", "d", "cm", "m"};
    
    public static void main(string args[]) {
        int i=1974;
        string roman=toroman(i);
        int arabic = toarabic(roman);
        system.out.println("initial="+i+", roman="+roman+", arabic="+arabic);
    }
    
     /**
     * dichotomic search in sorted array of intervals
     * @param number
     * @return floor index closest to number
     */
    private final static int findfloor(final int number, final int firstindex, final int lastindex) {
        if(firstindex==lastindex)
            return firstindex;
        if(intervals[firstindex]==number)
            return firstindex;
        if(intervals[lastindex]==number)
            return lastindex;
        final int median=(lastindex+firstindex)/2;
        if(median==firstindex)
            return firstindex;
        if(number == intervals[median])
            return median;
        if(number > intervals[median])
            return findfloor(number, median, lastindex);
        else
            return findfloor(number, firstindex, median);

    }

    public final static string toroman(final int number) {
        int floorindex=findfloor(number, 0, intervals.length-1);
        if(number==intervals[floorindex])
            return numerals[floorindex];
        return numerals[floorindex]+toroman(number-intervals[floorindex]);
    }
    
    public static int toarabic(string roman) {
        int result = 0;
        for (int i = intervals.length-1; i >= 0; i-- ) {
            while (roman.indexof(numerals[i]) == 0 && numerals[i].length() > 0) {
                result += intervals[i];
                roman = roman.substring(numerals[i].length());
            }
        }
        return result;
    }
}


a: вот например есть вариант:
public enum roman {
    i(1), v(5), x(10), l(50), c(100), d(500), m(1000);
    private final int value;
    private roman(int value) {
        this.value = value;
    }
    public int toint() {
        return value;
    }
}

и дальше конвертация выглядит так:
roman.valueof("x").toint();

если же у вас больше 10, то необходимо это обработать:
public enum roman {
    public boolean shouldcombine(roman next) {
        return this.value < next.value;
    }
    public int toint(roman next) {
        return next.value - this.value;
    }
}

и получить результат:
list<roman> romans = new arraylist<>();
input.chars().maptoobj(character::valueof)
    .map(roman::valueof).foreach(romans::add);
int value = 0;
while (!romans.isempty()) {
    roman current = romans.remove(0);
    if (!romans.isempty() && current.shouldcombine(romans.get(0))
        value += current.toint(romans.remove(0));
    else
        value += current.toint();
}

вот есть подобные вопросы: 1, 2 и первоисточник

user
The total number of "a"s in that passage is 130.
assistant