Доступ к строковому индексу - PullRequest
0 голосов
/ 01 января 2019

Эта проблема связана со строкой и массивом в Java.Скажем, у меня есть строка S = abcd.У меня есть индекс массива [] = {2}.Моя проблема состоит в том, чтобы узнать значение из String S в позиции индекса 2, потому что индекс массива [] содержит 2. У меня есть целевой массив, содержащий "EF".Теперь, если S содержит a в позиции 2, он будет заменен на "EF".

Как получить доступ к 2 позиции S. Это что-то подобное.S[index[0]] Это возвращение S [2]?

Пример: Ввод: S = "abcd", indexes = [0,2], sources = ["a", "cd"], target = ["eee", "ffff"] Вывод: "eeebffff "Объяснение:" a "начинается с индекса 0 в S, поэтому оно заменяется на" eee ".«cd» начинается с индекса 2 в S, поэтому он заменяется на «ffff».

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Моя проблема состоит в том, чтобы узнать значение из строки S в позиции индекса 2

S.charAt(2) возвращает значение char в индексе 2, или вы можете char[] charArray=S.toCharArray() чтобы получить char[] и просмотреть его в индексе массива, например, charArray[2]

, если S содержит позицию в позиции 2, он будет заменен на "EF".

if(S.charAt(2)=='a'){
   StringBuilder sb=new StringBuilder(S);
   S=sb.replace(2,3,"EF").toString();
}

, если вы уверены, что существует только один a:

if(S.charAt(2)=='a'){
     S=S.replace("a","EF");
}
0 голосов
/ 01 января 2019

Отредактировано После вашего комментария я добавил массив sources и предположил, что оба массива sources и targets имеют одинаковую длину:

    String s = "abcd";
    String[] sources = {"a","cd"};
    int[] indexes  = {0, 2};
    String[] targets = {"eee", "ffff"};

    int more = 0;

    for (int i = 0; i < targets.length; i++) {
        int startIndex = more + indexes[i];
        int endIndex = more + indexes[i] + sources[i].length();
        if (startIndex < s.length() && endIndex <= s.length()) {
            String sBefore = s.substring(0, indexes[i] + more);
            String sAfter = s.substring(indexes[i] + sources[i].length() + more);
            if (sources[i].equals(s.substring(startIndex, endIndex))) {
                s = sBefore + targets[i] + sAfter;
                more += targets[i].length() - sources[i].length();
            }
        }
    }

    System.out.println(s);

напечатает

eeebffff
...