Как обработать строку в Java - PullRequest
1 голос
/ 10 июня 2009

Я хочу сделать строки от "a b c" до "prefix_a prefix_b prefix_c"

как это сделать в Java?

Ответы [ 6 ]

4 голосов
/ 10 июня 2009

Вы можете использовать метод String: replaceAll (регулярное выражение строки, замена строки)

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

Возможно, вам потребуется настроить регулярное выражение, чтобы точно соответствовать вашим требованиям.

3 голосов
/ 10 июня 2009

Предполагая разделение пробела (" "), 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 голосов
/ 10 июня 2009

Вы можете разбить строку, используя регулярные выражения, и поместить ее обратно вместе с циклом над полученным массивом:

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);
    }
}
0 голосов
/ 10 июня 2009

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

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

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

0 голосов
/ 10 июня 2009

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

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

UPDATE

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

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 голосов
/ 10 июня 2009

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

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

System.out.println(result);

покажет вам

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