Java: как инициализировать String []?


Ответы:


332

Вам нужно инициализировать errorSoon , как указано в сообщении об ошибке, вы только объявили его.

String[] errorSoon;                   // <--declared statement
String[] errorSoon = new String[100]; // <--initialized statement

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

Если вы только объявите массив (как вы это сделали), то для Stringэлементов не будет выделена память , а будет только указатель на ссылку errorSoon, и вы получите ошибку при попытке инициализировать переменную с любым индексом.

Как примечание, вы также можете инициализировать Stringмассив внутри фигурных скобок, { }так что

String[] errorSoon = {"Hello", "World"};

что эквивалентно

String[] errorSoon = new String[2];
errorSoon[0] = "Hello";
errorSoon[1] = "World";

8
Жаль, что вы не можете использовать () для создания экземпляра каждой строки в вашем массиве со значением по умолчанию. Массив из 5 пустых строк должен быть = new Array [5] (""); вместо = {"", "", "", "", ""}.
Питер де Би

Используйте для цикла.
Том Беррис

128
String[] args = new String[]{"firstarg", "secondarg", "thirdarg"};

3
Возможно, не совсем то, что предлагает заголовок вопроса ОП, но я пытался передать свою строку параметру, который принимает String [], это решение
kommradHomer

Не могли бы вы пропустить новую строку? String [] output = {"", "", ""}; Кажется, работает в моем коде.
Питер де Би

2
Если вы уже инициализировали свой массив и хотите повторно инициализировать его, вы не можете идти. args = {"new","array"};Вам придется args = new String[]{"new", "array"};
Дарпан,


9

Я полагаю, что вы только что перешли с C ++. Что ж, в Java вы должны инициализировать тип данных (кроме примитивных типов, а String не рассматривается как примитивный тип в Java), чтобы использовать их в соответствии с их спецификациями, если вы этого не сделаете это как пустая ссылочная переменная (очень похоже на указатель в контексте C ++).

public class StringTest {
    public static void main(String[] args) {
        String[] errorSoon = new String[100];
        errorSoon[0] = "Error, why?";
        //another approach would be direct initialization
        String[] errorsoon = {"Error , why?"};   
    }
}

9

В Java 8 мы также можем использовать потоки, например

String[] strings = Stream.of("First", "Second", "Third").toArray(String[]::new);

В случае, если у нас уже есть список строк ( stringList), мы можем собрать в массив строк как:

String[] strings = stringList.stream().toArray(String[]::new);

7
String[] errorSoon = new String[n];

Если n, сколько строк нужно хранить.

Вы можете сделать это в объявлении или позже без String [], если только вы не попытаетесь их использовать.


2
String[] arr = {"foo", "bar"};

Если вы передаете строковый массив методу, выполните:

myFunc(arr);

или сделать:

myFunc(new String[] {"foo", "bar"});

1

Вы всегда можете написать это так

String[] errorSoon = {"Hello","World"};

For (int x=0;x<errorSoon.length;x++) // in this way u create a for     loop that would like display the elements which are inside the array     errorSoon.oh errorSoon.length is the same as errorSoon<2 

{
   System.out.println(" "+errorSoon[x]); // this will output those two     words, at the top hello and world at the bottom of hello.  
}

0

Строковая декларация:

String str;

Строка Инициализация

String[] str=new String[3];//if we give string[2] will get Exception insted
str[0]="Tej";
str[1]="Good";
str[2]="Girl";

String str="SSN"; 

Мы можем получить индивидуальный характер в строке:

char chr=str.charAt(0);`//output will be S`

Если я хочу, чтобы получить индивидуальный характер Ascii значение, как это:

System.out.println((int)chr); //output:83

Теперь я хочу конвертировать значение Ascii в Charecter / Symbol.

int n=(int)chr;
System.out.println((char)n);//output:S


0

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

String[] row = new String[size];
Arrays.fill(row, "");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.