Манипуляция строкой Java - PullRequest
3 голосов
/ 15 марта 2012

Так что я использовал этот сайт много, но не могу найти ответ ... Как я могу манипулировать определенными символами / строками из более крупной строки.Я пытаюсь использовать string.substring (pos, amount), но когда я пытаюсь использовать его в циклах, я получаю строку Index Error.Например, как я могу удалить 'e' в [4] из строки "abcdefg" или просто использовать заглавную букву "cde"?Извините за отсутствие формального кода в моем вопросе, это в основном концептуальная вещь.Спасибо.

Спасибо за предложения, которые я пытался ответить на этот вопрос: напишите программу, которая принимает в качестве входных данных строку только букв и отображает строку, каждая третья буква которой начинается с второй буквы, и вседругие буквы строчные.

С этим кодом:

public class Test {
    public static void main(String[] arguments){
        Scanner fish = new Scanner(System.in);      
        String a = fish.nextLine();
        int len=a.length();
        for (int i = 1; i < len; i += 3){
            String z = a.substring(i, 1);
            String q = a.substring(i + 1);
            a = z.toUpperCase() + q;
        }
        System.out.println(a);
    }
}

Ответы [ 5 ]

4 голосов
/ 15 марта 2012

Сама строка является неизменным классом, поэтому вы не можете вносить в нее изменения. Когда вы вносите изменения, новый объект возвращается обратно ... Но это не всегда лучший способ (с точки зрения производительности) манипулировать строками, особенно если у вас большая строка.

В Java есть некоторые другие классы, такие как StringBuffer и StringBuilder, которые предоставляют множество других операций манипуляции со строками. Ниже приведен фрагмент:

`public String manipulateStr(String sourceStr) {
    StringBuffer sb = new StringBuffer(sourceStr);
    sb.delete(5,7); // Delete characters between index 5-7
    sb.insert(10, "<inserted str>"); // Insert a new String
    return sb.toString();
}`

Надеюсь, что выше помогает.

0 голосов
/ 27 марта 2013

Как я могу удалить 'e' в [4] из строки "abcdefg"

Как уже сказала Амея, если вы имеете дело с объектами String, тогда вы не сможете«удалить» е, потому что строка исправлена.Вместо этого вам нужно создать новый объект String, содержащий все биты, кроме e:

String input = "abcdefg";
String output = input.substring(0, 4) + input.substring(5);
//                     "abcd"         +       "fg"

или просто использовать заглавную букву "cde"?

Опять же, вы можете взять бит раньше, добавить верхний регистр "cde", а затем добавить остальные:

String output = input.substring(0, 2) + input.substring(2, 5).toUpperCase()
                + input.substring(5);
//            = "ab" + "CDE" + "fg"

Написать программу, которая принимает в качестве входных данных строкутолько буквы и отображает строку с заглавными буквами каждой третьей буквы, начиная со второй буквы, а все остальные буквы строчными.

В этом случае вам нужно перебрать символы, поэтому лучше использоватьStringBuilder вместо добавления строк вместе (по соображениям производительности).Вот пример добавления каждого символа один за другим, и для каждого третьего символа преобразование его в верхний регистр:

StringBuilder sb = new StringBuilder();
for (int i=0; i<input.length(); i++)
{
    char c = input.charAt(i);
    if (i%3 == 1) {
        c = Character.toUpperCase(c);  // every third character upper case
    }
    else {
        c = Character.toLowerCase(c);
    }
    sb.append(c);
}
String output = sb.toString(); // aBcdEfg
0 голосов
/ 15 марта 2012

Если вы знаете, что хотите удалить, произнесите букву «е», но вы не знаете, где она находится в строке, вы можете использовать

stringName.indexOf("e");

Возвращает целое число индекса первого вхождения строки "e" в stringName. Затем вам нужно будет создать новую строку, которая будет содержать подстроки вашей исходной строки. Вам нужно будет указать начальный и конечный индексы для ваших подстрок на основе возвращенного целого числа из indexOf ().

Если вы используете indexOf () для поиска строки длиной более одного символа, например indexOf ("ef"), вам также необходимо будет учитывать длину этой строки.

0 голосов
/ 15 марта 2012

replaceAll() может быть хорошим вариантом здесь, согласно Java API:

Заменяет каждую подстроку этой строки, которая соответствует данному регулярному выражению, с данной заменой.

Это похоже на то, что вы хотите, так как вы можете сделать что-то вроде:

str.replace('e', ''); // remove 'e' from the string, or
str.replaceAll("cde", "CDE");

Проблема, с которой большинство людей сталкивается с replaceAll(), заключается в том, что первый параметр не является литералом String, это регулярное выражение, которое интерпретируется и используется как шаблон для сопоставления.

Это только быстрый пример, но использование replace() и replaceAll() эффективно делает то, что вы хотите. Конечно, это не самый эффективный и простой способ написания.

0 голосов
/ 15 марта 2012

К сожалению, не существует простого способа сделать то, что вы ищете.Подстрока не предназначена для замены.Например, некоторые языки позволяют вам это делать:

str.substring(2,3).toUpperCase();

Java не работает таким образом.Если вы ищете такие вещи, вам лучше всего написать небольшую библиотеку функций, которая принимает строки и координаты и выполняет работу вручную.Это не запекается в классе String.Посмотрите, что все уже выпекается в классе String!Он не нуждается в большем количестве функций, которые могли бы использовать только небольшие группы пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...