Я хочу сделать строки типа «A B C», чтобы «prefix_a prefix_b prefix_c»как обрабатывать строку в Java
, как сделать это в Java?
Я хочу сделать строки типа «A B C», чтобы «prefix_a prefix_b prefix_c»как обрабатывать строку в Java
, как сделать это в Java?
Предполагая раздвоение характер пространства (" "
), то 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());
Единственный улов с первым образцом заключается в том, что в конце последнего токена будет постороннее пространство.
надеюсь, что я не неправильно читаю вопрос. Вы просто ищете прямую конкатенацию?
String someString = "a";
String yourPrefix = "prefix_"; // or whatever
String result = yourPrefix + someString;
System.out.println(result);
бы показать вам
prefix_a
woops. думал, что у вас есть «a» «b» «c». Так что да, сначала используйте String.split, чтобы получить фрагменты. – JustJeff
Это 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();
Причина для голосования? Языковая непереносимость? : D –
Вы можете использовать StringTokenizer для перечисления над строкой, с «пространством» разделителем, и в цикле вы можете добавить префикс на текущий элемент в вашем перечислении. Итог: см. StringTokenizer в javadocs.
Вы также можете сделать это с регулярным выражением и границей слов («\ b»), но это кажется хрупким.
Другая возможность - использовать String.split, чтобы преобразовать вашу строку в массив строк, а затем выполнить цикл над вашим массивом «a», «b» и «c» и префикс ваших элементов массива с помощью префикса вашего выбор.
Вы можете разбить строку с помощью регулярных выражений и положить его обратно вместе с петлей над результирующим массивом:
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);
}
}
Вы можете использовать метод Строки: replaceAll(String regex,String replacement)
String s = "a xyz c";
s = s.replaceAll("(\\w+)", "prefix_$1");
System.out.println(s);
Вам может понадобиться для tweek regexp для удовлетворения ваших точных требований.
вы могли бы .trim(), что в последнем пространстве прочь, так как требование не указывает на наличие ведущих или конечных пробелов. – ninesided
@ninesided: Это хорошая идея, спасибо за предложение :) – coobird