25

簡単かもしれないイライラする問題があります。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"

mStrings を宣言するためにいくつかの異なる試みを試みましたが、除外するとすべてが正しくありませんでした 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 )

4

6 に答える 6

25

使用する:

String[] mStrings = new String[title.length];
于 2012-11-02T04:10:59.003 に答える
17

を初期化していませんString[]。@TrầnSĩLong で提案されているように、正確な配列サイズを使用して初期化するか、a を使用してList<String>から a に変換する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
于 2012-11-02T04:25:39.717 に答える
6

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

 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]);
    }
于 2012-11-02T04:14:38.120 に答える
4

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

于 2012-11-04T04:50:53.130 に答える
3

Trần Sĩ Long が提案したように、

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

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

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

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

于 2012-11-02T09:48:35.707 に答える
2

以下のように書けます。このスレッドの構文ガイドラインを確認してください

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

配列が煩わしい場合は、ArrayListを使用してください。

于 2012-11-02T04:14:44.417 に答える