私は簡単なイライラする問題を抱えています。 Javaの配列は、イライラするほど直感的ではないようです。
Titleという文字列配列があり、いくつかのタイトルがあります
ここは配列の一部です
private String[] title = {
"Abundance",
"Anxiety",
"Bruxism",
"Discipline",
"Drug Addiction"
}
この部分はコードがコンパイルされて正常に実行されるので、この配列に基づいて別の配列を作成したいと思います。新しい配列は、この配列のデータと連結された静的テキストになり、さらに静的テキストになります。
2つの静的な文字列を定義します
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;
}
ループは配列値を取得し、非アルファ文字を削除して、小文字にします
麻薬中毒
になる
麻薬中毒
私はこのようなものになりたい
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"
私はmStringを宣言するためにいくつかの異なる試みを試みましたが、それを省略するとすべてが正しくありませんでしたEclipseはこれを示唆しています
String[] mStrings;
これはかなり簡単で正しいはずですが、その後に何かを入力するとエラーが表示されます
Syntax error on token ";", { expected after this token
他の配列と1対1なので、宣言でこれを試しましたが、失敗します
String[] mStrings[title.length];
それに量を与えるために
私はエラーが宣言のどこかにあると考えていますが、明確にそれをレイアウトするドキュメントを見つけることができないようです。
宣言だけでなく、配列のロードも発生することを期待しているようですが、これは望ましくありませんが、3つの要素でロードしようとしましたが、まだ正しく動作しませんでした
私が述べたように、私はそれを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;
}
(ソース: imobilizeit.com )
この問題の解決の始まりは、forループまたはその他の関数またはアクションの使用をクラス定義で行うことはできませんが、メソッド内のメソッド/コンストラクタ/ブロック定義に含める必要があるという事実によるクラス。
つかいます:
String[] mStrings = new String[title.length];
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
配列サイズを宣言すると問題が解決します
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]);
}
TrầnSĩLongが示唆したように、
String[] mStrings = new String[title.length];
文字列の連結を適切な括弧に置き換えます。
mStrings[i] = (urlbase + (title[i].replaceAll("[^a-zA-Z]", ""))).toLowerCase() + imgSel;
これを試して。連結による問題の場合は、適切な括弧で解決されます。それが役に立てば幸い。