Объявление строки массива
У меня неприятная проблема, которая может быть легкой. Массивы в 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;
Попробуйте это. Если это проблема из-за конкатенации, она будет решена с помощью правильных скобок. Надеюсь, что это поможет.