显示数组列表中的字符串内容 (Android Studio)

Posted

技术标签:

【中文标题】显示数组列表中的字符串内容 (Android Studio)【英文标题】:Displaying string content from an arraylist (Android Studio) 【发布时间】:2021-09-24 04:00:09 【问题描述】:

我正在尝试显示数组列表中的所有字符串内容,但数组列表的大小未知(使用 android Studio) 比如:

fruit = new ArrayList<>() veg = new ArrayList<>()

经过一些操作,现在故事数组列表中包含了一些信息,例如:

fruit = "apple", "orange", "banana", "peach",...;

veg = "cucumber", "spinach", "pumpkin", "broccoli",...;

我不知道水果和蔬菜的数组列表在操作后多久了。但我知道水果和蔬菜的数组列表大小相同。我想将每个列表存储为:

fruitOne = fruit(0), fruitTwo = fruit(1), fruitThree = fruit(2),...

vegOne = veg(0), vegTwo = veg(1), vegThree = veg(2),...

那我想把它们一起显示为一个字符串?这样我就可以有一个字符串,例如:

String myStore = "I am selling" + fruitOne + " and " + vegOne + "/n" + fruitTwo + " and " + vegTwo + "/n" + fruitThree + " and " + vegThree"...;

我觉得它需要使用 For 循环通过调用 fruit(0), fruit(1),...,fruit(i) 来一一拉出每个列表。但是如何独立存储fruit(0), fruit(1),...,fruit(i) 列表中的每一个,以便将它们连接在一起成为 myStore 的一个字符串?

所有教程都在讨论 printLn 或 logd,因此它可以打印每个 for 循环的 fruit(i) 或 veg(i),但不能真正将 fruit(i) 或 veg(i) 作为变量存储到可以独立使用。

感谢您的帮助!

【问题讨论】:

String.join(" ", story) 怎么样?这样,您可以保持 ArrayList 原样并连接其条目。 你知道流吗?字符串生成器?字符串连接?你试过什么?您到底想做什么,记录所有内容,或将其全部存储在一个字符串中? 这只是一个例子,实际列表中更像是“apple”、“orange”、“peach”。然后我需要将连接的字符串变成像 = "我喜欢吃" + 水果 (0) + " 但我更喜欢吃" + 水果 (1) + ",我最喜欢的是 " + 水果 (2)。 我需要先将列表一个一个的存储在数组中,以便随时使用。例如,fruitOne = fruit(0)、fruitTwo =fruit(1)、fruitThree =fruit(2) 等。我还有另一个蔬菜列表是 vegOne = veg(0)、vegTwo = veg(1)、vegThree = veg(2) 等。稍后,我想要一个字符串 = "我在卖" + fruitOne + " and " + vegOne + "/n" +fruitTwo + " and " + vegTwo + "/n" +fruitThree + " 和 " + vegThree,这个列表一直持续到我在水果和蔬菜的数组列表中没有数据为止。 【参考方案1】:

有多种方法可以将单词列表变成一个完整的句子。 其中之一就是@deHaar 提到的。

使用String.join( String , Iterable ); 所以在你的情况下它会是这样的:


    List<String> story = Arrays.asList("I", " would", " like", " to", " go", " to", " the", " beach");
        
    String continuousStory  = String.join("", story);
    System.out.println(continuousStory );

您也可以省略列表中的空格字符,仅在将它们连接成句子时添加它们。所以在视觉上我的意思是这样的:


    // leaving out the space infront of each word in the list
    List<String> story = Arrays.asList("I", "would", "like", "to", "go", "to", "the", "beach");
    
    // adding a delimiter space character when joining the words
    String continuousStory  = String.join(" ", story);
    System.out.println(continuousStory );

我希望这回答了你的问题。

【讨论】:

您好,谢谢您的回答。我想我的询问不够清楚。你介意再看一遍吗?我不能只对我的案例使用 .join 方法。谢谢 我添加了一个新答案【参考方案2】:

更新问题的新答案。 根据您在 cmets 中所说的:

所有的教程都在讲关于 printLn 或 logd 的内容,所以它可以打印 Fruit(i) 或 veg(i) 每个 for 循环,但并不真正存储 fruit(i) 或 veg(i) 作为变量独立使用。

我需要先将列表一个一个地存储在数组中,这样我就可以 随时使用它们。例如,fruitOne = fruit(0),fruitTwo = 水果(1),水果三 = 水果(2)等

我想你可能忘记了水果和蔬菜的数组已经是你可以单独使用的变量了。

您不能在运行时动态创建更多变量。 因此,例如将 10 个单词的 Array 在运行时转换为 10 个单独的变量。

String fruitOne = fruits(0);
String fruitTwo = fruits(1);
String fruitThree = fruits(2);
// no code left to assign any more variables

等等...这些必须在编译时进行(书面声明和赋值)

除非您知道列表的最大大小,否则您可以创建一堆变量并像这样分配它们:

// Assuming the arrays can be any size but  the fruit and veg has the same size of arraylist
        List<String> fruits = Arrays.asList("apple", "orange", "banana", "peach");
        List<String> veggies = Arrays.asList("cucumber", "spinach", "pumpkin", "broccoli");

    String fruitOne, fruitTwo, fruitThree, fruitFour, fruitFive, fruitSix;
    String vegOne, vegTwo, vegThree, vegFour, vegFive, vegSix;

    fruitOne = fruits.size()>0 ? fruits.get(0) : null;
    fruitTwo = fruits.size()>1 ? fruits.get(1) : null;
    fruitThree = fruits.size()>2 ? fruits.get(2) : null;
    fruitFour = fruits.size()>3 ? fruits.get(3) : null;
    fruitFive = fruits.size()>4 ? fruits.get(4) : null;

    vegOne = veggies.size()>0 ? veggies.get(0) :null;
    vegTwo = veggies.size()>1 ? veggies.get(1) :null;
    vegThree = veggies.size()>2 ? veggies.get(2) :null;

    //Now you can use them per variable but you are limited to the amount you've programmed
    String myStore = "I am selling " + fruitOne + " and " + vegOne + "\n" + fruitTwo + " and " + vegTwo + "\n" + fruitThree + " and " + vegThree;
    System.out.println(myStore);

我强烈建议不要这样做,因为这样的硬编码确实没有必要。这是一个有硬限制的大量代码。

也不可能在循环中使用大量 if () else 子句来改变变量。这将使循环毫无意义。

从数组中获取值的最佳方法是直接从数组中获取它们,而不是将每个值分配给一个变量,因为当数组列表的大小是动态的时,您会受到创建的变量数量的限制。

【讨论】:

感谢您再次回复。我确实尝试过这样的事情,但问题是我不知道数组列表的大小(可能是数百个)。如果是这种情况,我需要手动准备数百个字符串变量,例如fruitOne、fruitTwo、...、fruitOneHundredOne 等。而且,如果实际上从fruitThree 到fruitOneHundredOne 实际上为null,我的连接字符串将显示数百个“ null" 当我将 TextView 设置为此字符串时。所以这不起作用。 是的,这就是我说不要这样做的原因。不要为 arrayList 的内容创建单独的变量。 arrayList 的大小是动态的,(它们在运行时会发生变化)变量不是动态的(它们是在编译时编写的代码)您必须直接使用数组来获取值,而不是为每个值分配手写变量。直接从数组 String myStore = "I am selling " + fruits.get(0)+ " 和 " + veggies.get(0) + "\n" + fruits.get(1)+ " 和 " + veggies 中获取值。 get(1) + "\n" + fruits.get(3)+ " 和 " + veggies.get(3) ;

以上是关于显示数组列表中的字符串内容 (Android Studio)的主要内容,如果未能解决你的问题,请参考以下文章

将列表存储到数组列表中的字符串

Android如何从同一个数组中仅显示列表视图中的某些项目?

一起学Android之ListView

更改了arraylist时,ArrayList和ListView的Android数组适配器不会更新

如何在统一的字符串数组列表中查找包含?

获取数组列表中缺少的数字