2009-06-10 4 views

ответ

3

Предполагая раздвоение характер пространства (" "), то String может быть разделен с помощью метода split, то каждый новый String может иметь prefix_ добавляется, а затем сцепляются обратно в String:

String[] tokens = "a b c".split(" "); 
String result = ""; 

for (String token : tokens) { 
    result += ("prefix_" + token + " "); 
} 

System.out.println(result); 

Выход :

prefix_a prefix_b prefix_c 

Использование StringBuilder при необходимости может улучшить производительность:

String[] tokens = "a b c".split(" "); 
StringBuilder result = new StringBuilder(); 

for (String token : tokens) { 
    result.append("prefix_"); 
    result.append(token); 
    result.append(" "); 
} 
result.deleteCharAt(result.length() - 1); 

System.out.println(result.toString()); 

Единственный улов с первым образцом заключается в том, что в конце последнего токена будет постороннее пространство.

+0

вы могли бы .trim(), что в последнем пространстве прочь, так как требование не указывает на наличие ведущих или конечных пробелов. – ninesided

+0

@ninesided: Это хорошая идея, спасибо за предложение :) – coobird

0

надеюсь, что я не неправильно читаю вопрос. Вы просто ищете прямую конкатенацию?

String someString = "a"; 
String yourPrefix = "prefix_"; // or whatever 
String result = yourPrefix + someString; 

System.out.println(result); 

бы показать вам

prefix_a 
+0

woops. думал, что у вас есть «a» «b» «c». Так что да, сначала используйте String.split, чтобы получить фрагменты. – JustJeff

0

Это C#, но должен легко перевести на Java (но это не очень разумное решение).

String input = "a b c"; 
String output (" " + input).Replace(" ", "prefix_") 

ОБНОВЛЕНИЕ

Первое решение не имеет пробелов в выходе. Для этого решения требуется символ держателя места (#), отсутствующий на входе.

String output = ("#" + input.Replace(" ", " #")).Replace("#", "prefix_"); 

Это, вероятно, более эффективно использовать StringBuilder.

String input = "a b c"; 

String[] items = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); 

StringBuilder sb = new StringBuilder(); 

foreach (String item in items) 
{ 
    sb.Append("prefix_"); 
    sb.Append(item); 
    sb.Append(" "); 
} 

sb.Length--; 

String output = sb.ToString(); 
+0

Причина для голосования? Языковая непереносимость? : D –

0

Вы можете использовать StringTokenizer для перечисления над строкой, с «пространством» разделителем, и в цикле вы можете добавить префикс на текущий элемент в вашем перечислении. Итог: см. StringTokenizer в javadocs.

Вы также можете сделать это с регулярным выражением и границей слов («\ b»), но это кажется хрупким.

Другая возможность - использовать String.split, чтобы преобразовать вашу строку в массив строк, а затем выполнить цикл над вашим массивом «a», «b» и «c» и префикс ваших элементов массива с помощью префикса вашего выбор.

0

Вы можете разбить строку с помощью регулярных выражений и положить его обратно вместе с петлей над результирующим массивом:

public class Test { 
    public static void main (String args[]) { 
     String s = "a b c"; 
     String[] s2 = s.split("\\s+"); 
     String s3 = ""; 
     if (s2.length > 0) 
      s3 = "pattern_" + s2[0]; 
     for (int i = 1; i < s2.length; i++) { 
      s3 = s3 + " pattern_" + s2[i]; 
     } 
     System.out.println (s3); 
    } 
} 
4

Вы можете использовать метод Строки: replaceAll(String regex,String replacement)

String s = "a xyz c"; 
s = s.replaceAll("(\\w+)", "prefix_$1"); 
System.out.println(s); 

Вам может понадобиться для tweek regexp для удовлетворения ваших точных требований.

+0

спасибо oscar :) – objects

+0

О, это не сработает, когда строка похожа на «несколько ключевых слов», мне нужно, чтобы она изменилась на «prefix_multiple prefix_keywords» – omg

+0

обновленный ответ на слова поддержки – objects

Смежные вопросы