преобразование строки в массив строк в java

115

У меня есть объект, который string = "name"; я хочу преобразовать в массив строк. Как мне это сделать? Есть ли встроенная функция Java? Вручную я могу это сделать, но я ищу встроенную функцию java.

Мне нужен массив, в котором каждый символ строки будет строкой. как char 'n' теперь будет строка "n", хранящаяся в массиве.

riyana
источник
10
Я думаю, вы не имеете в виду String[] ary = new String[] { "name" };, какая операция вам нужна? например, разделение на символы?
rsp
Вы имеете в виду строковый массив? Как вы могли бы иметь для этого функцию, это было бы просто: String [] array = {"Name"}; или вы имеете в виду символьный массив?
Woody
1
мне нужен массив, в котором каждый символ строки будет строкой. как char 'n' теперь будет строка "n", хранящаяся в массиве
riyana

Ответы:

201

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

String[] ary = "abc".split("");

Дает массив:

(java.lang.String[]) [, a, b, c]

Избавление от пустой 1-й записи оставим читателю в качестве упражнения :-)

Примечание. В Java 8 пустой первый элемент больше не включается.

RSP
источник
21
Примечание. При использовании jdk8 первая пустая запись больше не включается в результирующий массив. См. Stackoverflow.com/questions/22718744/…
Alexis C.
42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

Вторая строка выделяет массив String длиной 1. Обратите внимание, что вам не нужно указывать длину самостоятельно, например:

String[] strArray = new String[1];

вместо этого длина определяется количеством элементов в инициализаторе. С помощью

String[] strArray = new String[] {strName, "name1", "name2"};

создает массив длиной 3.

F1sh
источник
22
Не совсем отвечает на вопрос.
atamanroman 05
1
Проверьте историю изменений вопроса, и вы увидите, что вопрос требует чего-то другого до того, как он был отредактирован. Этот ответ соответствует первой версии.
f1sh
14

Предполагая, что вам действительно нужен массив односимвольных строк (не char[]или Character[])

1. Использование регулярного выражения:

public static String[] singleChars(String s) {
    return s.split("(?!^)");
}

Отрицательный просмотр вперед с нулевой шириной предотвращает сопоставление с образцом в начале ввода, поэтому вы не получите начальную пустую строку.

2. Использование Guava :

import java.util.List;

import org.apache.commons.lang.ArrayUtils;

import com.google.common.base.Functions;
import com.google.common.collect.Lists;
import com.google.common.primitives.Chars;

// ...

public static String[] singleChars(String s) {
    return
        Lists.transform(Chars.asList(s.toCharArray()),
                        Functions.toStringFunction())
             .toArray(ArrayUtils.EMPTY_STRING_ARRAY);
}
finnw
источник
1
Это регулярное выражение - лучшее ИМО. Помните, что Java 8 все равно исправила эту проблему.
шкшнайдер
13

Думаю, в этом просто нет необходимости, проще, чем

String[] array = {"name"};

Конечно, если вы настаиваете, вы можете написать:

static String[] convert(String... array) {
   return array;
}

String[] array = convert("name","age","hobby"); 

[Edit] Если вам нужны однобуквенные строки, вы можете использовать:

String[] s = "name".split("");

К сожалению, s [0] будет пустым, но после этого будут следовать буквы n, a, m, e. Если это проблема, вы можете использовать, например, System.arrayCopy, чтобы избавиться от первой записи массива.

Landei
источник
Мне нужен массив, в котором каждый символ строки теперь сам будет строкой. как char 'n' теперь будет строка "n", хранящаяся в массиве
riyana
@Landei У меня есть String date = "2013/01/05", и когда я использую .split ("/"), он не возвращает пустую строку как [0] и отлично работает. Есть ли разница между моим разделителем регулярных выражений и вашим?
Behzad
@Behzad AFAIK у вас забавное поведение с пустой записью только для пустых шаблонов, а не у вас есть какой-то разделитель.
Landei
@Landei Дай мне знать, что я тебя понял. Вы имеете в виду, что только использование "" в функции разделения возвращает 0 в качестве первого значения массива? да?
Behzad
12
String data = "abc";
String[] arr = explode(data);

public String[] explode(String s) {
    String[] arr = new String[s.length];
    for(int i = 0; i < s.length; i++)
    {
        arr[i] = String.valueOf(s.charAt(i));
    }
    return arr;
}
atamanroman
источник
11

В java 8 есть метод, с помощью которого вы можете сделать это: toCharArray ():

String k = "abcdef";
char[] x = k.toCharArray();

Это приводит к следующему массиву:

[a,b,c,d,e,f]
fonji
источник
Хотя это и не строковый массив, это идеально подходит для случаев, когда вам нужны символы вместо глупых обращений к String.charAt(0)односимвольным строкам без необходимости! ;)
varun
Ты спасаешь мою жизнь @fonji
Амит Шарма,
5

Строковый массив = массив символов?

Или у вас есть строка из нескольких слов, каждое из которых должно быть элементом массива?

String[] array = yourString.split(wordSeparator);

потерянный
источник
мне нужен массив, в котором каждый символ строки будет строкой. как char 'n' теперь будет строка "n", хранящаяся в массиве
riyana
4

Просто используйте .toCharArray()метод в Java:

String k = "abc";
char[] alpha = k.toCharArray();

Это должно нормально работать в Java 8.

Радхеш Кханна
источник
3

Преобразовать в тип Char?

http://www.javadb.com/convert-string-to-character-array

Aidanc
источник
1
Почему это отклонено? Это похоже на решение того, о чем просили (насколько я могу это понять) ... Хотя я думаю, что вы имели в виду char[]=)
Аксель
2

Вы можете использовать string.chars().mapToObj(e -> new String(new char[] {e}));, хотя это довольно долго и работает только с java 8. Вот еще несколько методов:

string.split(""); (Has an extra whitespace character at the beginning of the array if used before Java 8) string.split("|"); string.split("(?!^)"); Arrays.toString(string.toCharArray()).substring(1, string.length() * 3 + 1).split(", ");

Последний просто излишне длинный, это просто для развлечения!

HyperNeutrino
источник
2

Дополнительный метод:

Как уже упоминалось, вы можете довольно легко преобразовать исходное "имя" String в массив символов:

String originalString = "name";
char[] charArray = originalString.toCharArray();

Чтобы продолжить этот ход мыслей, вы можете затем преобразовать массив char в массив String:

String[] stringArray = new String[charArray.length];
for (int i = 0; i < charArray.length; i++){
    stringArray[i] = String.valueOf(charArray[i]);
}

На этом этапе ваш stringArray будет заполнен исходными значениями из исходной строки «name». Например, сейчас звонит

System.out.println(stringArray[0]);

В этом случае вернет значение «n» (как String).

AGéoCoder
источник
2

Разделение пустой строки с помощью String.split () возвращает массив с одним элементом, содержащий пустую строку . В большинстве случаев вы, вероятно, предпочтете получить пустой массив или null, если вы передали null, что именно то, что вы получаете с org.apache.commons.lang3.StringUtils.split (str) .

import org.apache.commons.lang3.StringUtils;

StringUtils.split(null)       => null
StringUtils.split("")         => []
StringUtils.split("abc def")  => ["abc", "def"]
StringUtils.split("abc  def") => ["abc", "def"]
StringUtils.split(" abc ")    => ["abc"]

Другой вариант - это google guava Splitter.split () и Splitter.splitToList (), которые возвращают итератор и список соответственно. В отличие от версии apache, Splitter будет генерировать NPE null:

import com.google.common.base.Splitter;

Splitter SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();

SPLITTER.split("a,b,   c , , ,, ")     =>  [a, b, c]
SPLITTER.split("")                     =>  []
SPLITTER.split("  ")                   =>  []
SPLITTER.split(null)                   =>  NullPointerException

Если вам нужен список, а не итератор, используйте Splitter.splitToList () .

ccpizza
источник
1
/**
 * <pre>
 * MyUtils.splitString2SingleAlphaArray(null, "") = null
 * MyUtils.splitString2SingleAlphaArray("momdad", "") = [m,o,m,d,a,d]
 * </pre>
 * @param str  the String to parse, may be null
 * @return an array of parsed Strings, {@code null} if null String input
 */
public static String[] splitString2SingleAlphaArray(String s){
    if (s == null )
        return null;
    char[] c = s.toCharArray();
    String[] sArray = new String[c.length];
    for (int i = 0; i < c.length; i++) {
        sArray[i] = String.valueOf(c[i]);
    }
    return sArray;
}

Метод String.splitсгенерирует пустой 1st, вам нужно удалить его из массива. Это скучно.

Фрэнк Хоу
источник
1

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

Это создает массив слов, разделяя строку по каждому пробелу:

String str = "string to string array conversion in java";
String delimiter = " ";
String strArray[] = str.split(delimiter);

Это создает следующий массив:

// [string, to, string, array, conversion, in, java]

Источник

Протестировано на Java 8

Suragch
источник
1

вот преобразовать простую строку в массив строк с помощью метода разделения.

String [] stringArray="My Name is ABC".split(" ");

Вывод

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Рахул Чаубе
источник