2012-03-15 4 views
3

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

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

С помощью этого кода:

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); 
    } 
} 
+0

Это просто позаботится. Вы должны думать обо всех возможностях. –

+0

Даже если это концептуальная вещь, гораздо проще, если вы публикуете то, что вы закодировали, даже если оно работает неправильно. Это помогает нам понять вашу проблему более четко, показывает, что вы наделены этим вопросом, и делает большинство пользователей SO более правдоподобным для написания качественного ответа для вас. –

+1

Показать код, который дает вам исключение. – Java42

ответ

0

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

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

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

4

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

В 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

Используйте StringBuilder, если вы не используете многопоточность. – UnKnown

0

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

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

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

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

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

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

0

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

stringName.indexOf("e"); 

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

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

0

Как я могу удалить «е» в [4] из строки «АБВГДЕЖ»

Как Ameya уже сказал, если вы имеете дело с объектами строк, то вы не можете «удалить» 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