web-dev-qa-db-fra.com

Déclaration de chaîne de tableau

J'ai un problème frustrant qui pourrait être facile. Les tableaux dans Java ne semblent pas intuitivement frustrants.

J'ai un tableau de chaînes appelé title il a plusieurs titres

voici une partie du tableau

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

Cette partie semble correcte car le code est compilé et fonctionne parfaitement. Je veux maintenant créer un autre tableau BASÉ sur ce tableau. les nouveaux tableaux seront transformés en texte statique concaténé avec les données de ce tableau, puis en texte plus statique.

Je définis les deux chaînes statiques

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

donc j'ai ajouté la déclaration pour le nouveau tableau

    String[] mStrings;

puis je crée une boucle for de base pour parcourir et créer les éléments du nouveau tableau

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

la boucle prend la valeur du tableau et supprime les caractères non alpha et le rend ainsi en minuscule

La toxicomanie

devient

la toxicomanie

Je veux finir avec quelque chose comme ça

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"

J'ai essayé plusieurs fois différentes de déclarer mStrings, mais tout était inexact quand je le laisse dehors. Eclipse suggère ceci

 String[] mStrings; 

Maintenant, cela semble être assez facile et correct, mais quand je saisis quoi que ce soit après, je reçois une erreur qui dit

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

Puisqu'il est un à un avec l'autre tableau, j'ai essayé ceci dans la déclaration, mais cela échoue également

    String[] mStrings[title.length];  

juste pour lui donner une quantité

Je pense que l'erreur est quelque part dans la déclaration mais je n'arrive pas à trouver un document qui l'exprime clairement.

Il semble qu’il s’attende non seulement à une déclaration, mais également au chargement du tableau, ce que je ne veux pas, mais j’ai aussi essayé de le charger avec trois éléments, mais cela ne fonctionnait toujours pas correctement.

Comme je l'ai dit, je veux le charger dans la boucle for

Toute aide serait appréciée.

J'ai essayé de définir la taille du tableau mais j'ai eu la même erreur

voici le code exact

c'est peut-être ailleurs

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];

L'ERREUR MONTRE ICI

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

screenshot of error in Eclipse
(source: imobilizeit.com )

15
Jeff Janes

Je pense que le début de la résolution de ce problème est le fait que l’utilisation de la boucle for ou de toute autre fonction ou action ne peut pas être effectuée dans la définition de classe mais doit être incluse dans une définition de méthode/constructeur/bloc à l’intérieur d’un objet. classe.

4
Jeff Janes

utilisation:

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

Vous n’initialisez pas votre String[]. Vous devez soit l'initialiser en utilisant la taille exacte du tableau, comme suggéré par @ TrầnSĩLong, soit utiliser un List<String> puis converti en un String[] _ (si vous ne connaissez pas la longueur):

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

Déclarez que la taille du tableau résoudra votre problème

 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

Vous pouvez écrire comme ci-dessous. Découvrez les instructions de syntaxe dans ce thread

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

Si vous trouvez que les tableaux sont agaçants, mieux vaut utiliser ArrayList .

2
san

Comme suggéré par Trần Sĩ Long, utilisez

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

Et remplacez la concatation de chaîne par une parenthèse appropriée.

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

Essaye ça. Si le problème vient de la concation, le problème sera résolu entre parenthèses. J'espère que ça aide.

2
MysticMagicϡ