перетворення рядка в рядковий масив у Java


115

У мене є string = "name"; я хочу перетворити в рядковий масив. Як це зробити? Чи є вбудована функція java? Вручну я можу це зробити, але я шукаю вбудовану функцію java.

Я хочу масив, де кожен символ рядка буде рядком. як char 'n' тепер буде рядок "n", що зберігається в масиві.


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

Ви маєте на увазі рядковий масив? Як ви могли мати функцію для цього, це було б просто: String [] array = {"Ім'я"}; чи ти маєш на увазі масив символів?
Вуді

1
я хочу масив, де кожен символ рядка буде рядком. як char 'n' тепер рядок "n" зберігається в масиві
riyana

Відповіді:


200

Щоб розпочати роботу із завдання, String.splitрозбиває рядки на регулярний вираз, і це може бути порожнім рядком:

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

Виходить масив:

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

Позбавлення від порожнього першого запису залишається читачем як вправа :-)

Примітка. У 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
Насправді не відповідає на питання.
отаманроман

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 вирішила саме цю проблему.
shkschneider

13

Я думаю, в цьому просто немає потреби, оскільки це не стане більш простим, ніж

String[] array = {"name"};

Звичайно, якщо ви наполягаєте, ви можете написати:

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

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

[Редагувати] Якщо ви хочете однобуквні рядки, ви можете використовувати:

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

На жаль, s [0] буде порожнім, але після цього будуть слідувати літери n, a, m, e. Якщо це проблема, ви можете використовувати, наприклад, System.arrayCopy, щоб позбутися першого запису масиву.


Я хочу, щоб масив, де кожен символ рядка буде тепер самим рядком. як char 'n' тепер рядок "n" зберігається в масиві
riyana

@Landei У мене ця дата String = "2013/01/05", і коли я використовую .split ("/"), вона не повертає порожню рядок як [0], і вона працює чудово. Чи є якась різниця між моїм звичайним сплітером виразу та вашим?
Бехзад

@Behzad AFAIK у вас смішна поведінка з порожнім записом лише для порожніх шаблонів, не у вас є роздільник.
Ландей

@Landei Дайте мені знати, що я зрозумів ваше значення. Ви маєте на увазі, що лише використовуючи функцію "" в розділеній функції, повертайте 0 як перше значення масиву? так?
Бехзад

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
Amit Sharma

5

String масив = масив символів?

Або у вас є рядок з декількома словами, кожне з яких має бути елементом масиву?

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

Додатковий метод:

Як вже було сказано, ви можете легко перетворити оригінальне "ім'я" рядка в масив char:

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" (у вигляді рядка)


2

Розщеплення порожнього рядка за допомогою String.split () повертає один масив елементів, що містить порожній рядок . У більшості випадків ви, мабуть, вважаєте за краще отримати порожній масив або нуль, якщо ви перейшли в нуль, саме це ви отримаєте з 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генерує порожній 1-й, його потрібно видалити з масиву. Це нудно.


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

тут є перетворити простий рядок в рядковий масив, використовуючи метод split.

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.