web-dev-qa-db-ja.com

配列文字列宣言

私は簡単なイライラする問題を抱えています。 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;
}

screenshot of error in Eclipse
(ソース: imobilizeit.com

15
Jeff Janes

この問題の解決の始まりは、forループまたはその他の関数またはアクションの使用をクラス定義で行うことはできませんが、メソッド内のメソッド/コンストラクタ/ブロック定義に含める必要があるという事実によるクラス。

4
Jeff Janes

つかいます:

String[] mStrings = new String[title.length];
23
Trần Sĩ Long

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
16
Phil

配列サイズを宣言すると問題が解決します

 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]);
    }
4
Ram kiran

以下のように書くことができます。この thread の構文ガイドラインを確認してください。

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

迷惑な配列を見つけた場合は、 ArrayList を使用してください。

2
san

TrầnSĩLongが示唆したように、

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

文字列の連結を適切な括弧に置き換えます。

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

これを試して。連結による問題の場合は、適切な括弧で解決されます。それが役に立てば幸い。

2
MysticMagicϡ