Объявление строки массива

У меня неприятная проблема, которая может быть легкой. Массивы в Java кажутся разочаровывающими, а не интуитивными.

У меня есть массив строк с названием title, он имеет несколько заголовков

вот часть массива

    private String[] title = {
        "Abundance",
        "Anxiety",
        "Bruxism",
        "Discipline",
        "Drug Addiction"
    }

Эта часть кажется нормальной, так как код компилируется и работает очень хорошо Теперь я хочу создать еще один массив на основе этого массива. новые массивы будут сделаны статическим текстом, объединенным с данными из этого массива, а затем более статическим текстом.

Я определяю две статические строки

    String urlbase = "http://www.somewhere.com/data/";
    String imgSel = "/logo.png";

поэтому я добавил объявление для нового массива

    String[] mStrings;

и затем я создаю базовый цикл for для итерации и создания элементов нового массива

    for(int i=0;i<title.length;i++) {
        mStrings[i] = urlbase + title[i].replaceAll("[^a-zA-Z]", "").toLowerCase() + imgSel;
    }

цикл принимает значение массива и удаляет не альфа-символы и делает его строчными таким образом,

Наркомания

становится

drugaddiction

Я хочу закончить с чем-то вроде этого

mStrings[0]="http://www.somewhere.com/data/abundance/logo.png"
mStrings[1]="http://www.somewhere.com/data/anxiety/logo.png"
mStrings[2]="http://www.somewhere.com/data/bruxism/logo.png"
mStrings[3]="http://www.somewhere.com/data/discipline/logo.png"
mStrings[4]="http://www.somewhere.com/data/drugaddiction/logo.png"

Я пробовал несколько разных попыток объявить mStrings, но все они были неверны когда я опускаю это, Eclipse предлагает это

 String[] mStrings; 

Теперь кажется, что это должно быть довольно легко и правильно, но когда я ввожу что-нибудь после этого Я получаю сообщение об ошибке

 Syntax error on token ";", { expected after this token

Поскольку это один к одному с другим массивом, я попытался сделать это в объявлении, но это также не помогло

    String[] mStrings[title.length];  

просто чтобы дать ему количество

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

Похоже, что он ожидает не только объявления, но и загрузки массива, чего я не хочу, но я также пытался загрузить его с тремя элементами, но он все еще не работал правильно

Как я уже сказал, я хочу загрузить его в цикл for

Любая помощь будет оценена.

Я попытался установить размер массива, но получил ту же ошибку

вот точный код

может быть, это в другом месте

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

ListView list;
LazyAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    list=(ListView)findViewById(R.id.list);
    adapter=new LazyAdapter(this, mStrings);
    list.setAdapter(adapter);

    Button b=(Button)findViewById(R.id.button1);
    b.setOnClickListener(listener);
}

@Override
public void onDestroy()
{
    list.setAdapter(null);
    super.onDestroy();
}

public OnClickListener listener=new OnClickListener(){

    public void onClick(View arg0) {
        adapter.imageLoader.clearCache();
        adapter.notifyDataSetChanged();
    }
};


private String[] title = {
        "Abundance",
        "Anxiety",
        "Bruxism",
        "Discipline",
        "Drug Addiction"
}


String urlbase = "http://imobilize.s3.amazonaws.com/giovannilordi/data/";
String imgSel = "/logo.png";    
String[] mStrings = new String[title.length];

ОШИБКА показывает ЗДЕСЬ

for(int i=0;i<title.length;i++) {
    mStrings[i] = urlbase + title[i].replaceAll("[^a-zA-Z]", "").toLowerCase() + imgSel;
}

screenshot of error in eclipse
(источник: imobilizeit.com)

Ответ 1

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

Ответ 2

использование:

String[] mStrings = new String[title.length];

Ответ 3

Вы не инициализируете свой String[]. Вам либо нужно инициализировать его, используя точный размер массива, как это было предложено @TrầnSĩLong, либо использовать List<String>, а затем преобразовать в String[] (если вы не знаете длину):

String[] title = {
        "Abundance",
        "Anxiety",
        "Bruxism",
        "Discipline",
        "Drug Addiction"
    };
String urlbase = "http://www.somewhere.com/data/";
String imgSel = "/logo.png";
List<String> mStrings = new ArrayList<String>();

for(int i=0;i<title.length;i++) {
    mStrings.add(urlbase + title[i].toLowerCase() + imgSel);

    System.out.println(mStrings[i]);
}

String[] strings = new String[mStrings.size()];
strings = mStrings.toArray(strings);//now strings is the resulting array

Ответ 4

Объявить размер массива, решит вашу проблему

 String[] title = {
            "Abundance",
            "Anxiety",
            "Bruxism",
            "Discipline",
            "Drug Addiction"
        };
    String urlbase = "http://www.somewhere.com/data/";
    String imgSel = "/logo.png";
    String[] mStrings = new String[title.length];

    for(int i=0;i<title.length;i++) {
        mStrings[i] = urlbase + title[i].toLowerCase() + imgSel;

        System.out.println(mStrings[i]);
    }

Ответ 5

Вы можете писать, как показано ниже. Ознакомьтесь с инструкциями по синтаксису в этом потоке

AClass[] array;
...
array = new AClass[]{object1, object2};

Если вы обнаружите, что массивы раздражают, лучше используйте ArrayList.

Ответ 6

Как предложил Trần Sĩ Long, используйте

String[] mStrings = new String[title.length];

И замените конкаттацию строк на правильную скобку.

mStrings[i] = (urlbase + (title[i].replaceAll("[^a-zA-Z]", ""))).toLowerCase() + imgSel;

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