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


115

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

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


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 пустой первый элемент больше не включается.


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.


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

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, чтобы избавиться от первой записи массива.


Мне нужен массив, в котором каждый символ строки теперь сам будет строкой. как 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;
}

11

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

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

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

[a,b,c,d,e,f]

Хотя это и не строковый массив, это идеально подходит для случаев, когда вам нужны символы вместо глупых обращений к 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.



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(", ");

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


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).


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 () .


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


1

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

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

Вывод

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.