数组字符串声明

时间:2012-11-02 04:08:29

标签: android arrays

我有一个令人沮丧的问题,这很容易。 java中的数组似乎令人沮丧地不直观。

我有一个名为title的String数组,它有几个标题

这是数组的一部分

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

循环获取数组值并去除非alpha字符并使其为小写 因此

吸毒成瘾

成为

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 http://www.imobilizeit.com/_errorshot/errorshot.png

6 个答案:

答案 0 :(得分:22)

使用:

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

答案 1 :(得分:16)

您尚未初始化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

答案 2 :(得分: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]);
    }

答案 3 :(得分:4)

我认为解决这个问题的开始是这样一个事实,即for循环或任何其他函数或动作的使用不能在类定义中完成,但需要包含在方法/构造函数/块定义中在课堂内。

答案 4 :(得分:2)

您可以写如下。 查看此thread

中的语法指南
AClass[] array;
...
array = new AClass[]{object1, object2};

如果您发现令人讨厌的阵列,请更好地使用ArrayList

答案 5 :(得分:2)

如TrầnSĩLong所说,请使用

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

用正确的括号替换字符串连接。

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

试试这个。如果由于连接而出现问题,将使用适当的括号解决。希望它有所帮助。