2010-08-05 6 views
72

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

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

+6

Я думаю, вы не означает ' String [] ary = new String [] {"name"}; ', какая операция вам нужна? например, разбиение на символы? – rsp

+0

Вы имеете в виду массив строк? Как у вас могла быть функция для этого, это было бы просто: String [] array = {"Name"}; или вы имеете в виду массив символов? – Woody

+1

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

ответ

140

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

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

Вырабатывает массив:

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

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

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

+14

Примечание. Используя jdk8, пустая первая запись больше не включена в результирующий массив. См. Http: // stackoverflow.com/questions/22718744/why-do-split-in-jdk-8-иногда-removees-empty-strings-if-they-are-at-start- –

4

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

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

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

+0

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

37
String strName = "name"; 
String[] strArray = new String[] {strName}; 
System.out.println(strArray[0]); //prints "name" 

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

String[] strArray = new String[1]; 

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

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

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

+16

На самом деле не отвечает на вопрос. – atamanroman

+1

Проверьте историю изменений вопроса, и вы увидите, что вопрос требует чего-то другого до его редактирования. Этот ответ отвечает на первую версию. – f1sh

12

Я предполагаю, что просто нет необходимости в этом, так как он не получит более простой, чем

String[] array = {"name"}; 

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

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

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

[Редактировать] Если вы хотите односимвольные строк , Вы можете использовать:

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

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

+0

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

+0

См. мои [Изменить] ... – Landei

+0

@Landei У меня есть эта строка даты = "2013/01/05", и когда я использую .split ("/ "), он не возвращает пустую строку как [0], и она отлично работает. Есть ли разница между моим разветвителем регулярных выражений и вашим? – Behzad

11

Предполагая, что вы действительно хотите массив строк односимвольных (не 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); 
} 
+0

Это регулярное выражение является лучшим IMO. Помните, что Java 8 в любом случае исправил эту конкретную проблему. – shkschneider

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

1

Вы можете использовать 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 originalString = "name"; 
char[] charArray = originalString.toCharArray(); 

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

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

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

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

возвращает значение «N» (в виде строки) в этом случае.

2

Разделение пустой строки на String.split() возвращает массив одиночных элементов , содержащий пустую строку. В большинстве случаев вы, вероятно, предпочтете получить пустой массив или 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 гуавы Splitter.split() и Splitter.splitToList() которые возвращают итератор и список соответственно. В отличие от версии апача 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().

7

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

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

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

[a,b,c,d,e,f] 
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] 

Source

Испытано в Java 8

1

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

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

Выход

stringArray[0]="My"; 
stringArray[1]="Name"; 
stringArray[2]="is"; 
stringArray[3]="ABC"; 
3

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

String k = "abc"; 
char alpha = k.tocharArray(); 

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

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