【问题标题】:Array String Declaration数组字符串声明
【发布时间】:2012-10-22 18:07:01
【问题描述】:

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

我有一个名为 title 的字符串数组,它有几个标题

这是数组的一部分

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

循环获取数组值并去除非字母字符并将其变为小写 因此

毒瘾

变成

吸毒

我想以这样的方式结束

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


(来源:imobilizeit.com

【问题讨论】:

  • 我一直在尝试@Ram kiran 提到的建议,但我仍然看到 &^%$ 错误再次错误是----令牌“;”上的语法错误,{ 预期在此令牌之后----第二个错误标志说要添加另一个'}'来关闭类主体,这让我认为第一个字符串数组的语法有问题,标题是正确的吗?
  • 尝试清理您的项目。这可能只是 Eclipse 搞砸了。有一次我花了 15-20 分钟寻找一个语法错误,结果发现是 Eclipse 误解了它。
  • 我已经尝试清理它重新启动它我能想到的任何其他东西我真的很茫然......任何其他想法......任何人

标签: android arrays


【解决方案1】:

使用:

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

【讨论】:

    【解决方案2】:

    你没有初始化你的String[]。您需要按照@TrầnSĩLong 的建议使用确切的数组大小对其进行初始化,或者使用List&lt;String&gt; 然后转换为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
    

    【讨论】:

      【解决方案3】:

      声明数组大小将解决您的问题

       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】:

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

      【讨论】:

        【解决方案5】:

        正如 Trần Sĩ Long 建议的那样,使用

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

        并用适当的括号替换字符串连接。

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

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

        【讨论】:

          【解决方案6】:

          你可以像下面这样写。 查看thread中的语法指南

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

          如果您发现数组烦人,最好使用ArrayList

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-25
            • 2023-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多