这个问题在这里已经有答案了:
打印java数组最简单的方法是什么(32个答案)
上个月关门了。
我构建了这个函数,它接受一行代码并将其放入arraylist并返回该列表。问题是当我试着将字符串输入到列表中时,当我调试代码时,它告诉我插入的是-[[ljava.lang.string@1786f9d5]-我怎样才能解决这个问题?我的代码是:
public static List<String[]> GetAll(String st){
String[] list = st.split("bags contain | contain |bags, | bag, | bags\\.| bag\\.");//ways to split it-shouldn't be changed
List<String[]> newlist = new ArrayList<>();
for (int i = 1; i < list.length; ++i) {
if (!list[i].equals("no other")) {
int n = Integer.parseInt(list[i].split(" | \\s")[0]);
for (int j = 0; j < n; ++j) {
newlist.add(list[i].split(" \\s[0-9],\\s "));//here is the problem I think when I try to remove the number from the string
}
}
}
if(newlist.size()>1) {
return newlist;
}
return new ArrayList<>();
}
public static void main(String[] args) {
HashMap<String,List<String[]>> hm = new HashMap<>();// can kinda ignore the hashmap
String input=reader.nextLine();
while(!input.equals("-1")){
hm.put(GetName(input),GetAll(input));
input=reader.nextLine();
}
}
public static String GetName(String st){
return st.split("bags")[0].stripTrailing();
}
static boolean isInArr(String[] arr,String looking){
for (String s:arr){
if(s.strip().equals(looking.strip())){
return true;
}
}
return false;
}
例如,每一行中的一个新字符串,前几个单词也应忽略:
旁注。这里“shade/name color”(在“contain”之前的字符串的开头)是不相关的,因此函数整体应该跳过它-这意味着在返回“shade/name color”的arraylist中不会出现
此处“暗靛蓝”不相关,因此功能整体应跳过它st=“暗靛蓝包包含2个褪色的黑色包、2个褪色的红色包、4个暗淡的青铜包。”
-->函数应该返回 [faded black, faded black, faded red, faded red, dim bronze, dim bronze, dim bronze, dim bronze]
此处“淡蓝”不相关,因此功能整体应跳过它st=“淡蓝包包含2个淡紫红色包、5个镜面青铜包、2个淡紫红色包。”
--函数应该返回 [pale fuchsia, pale fuchsia, mirrored bronze, mirrored bronze, mirrored bronze, mirrored bronze, mirrored bronze, faded fuchsia, faded fuchsia]
此处“浅石灰”不相关,因此功能整体应跳过它st=“浅石灰袋包含4个浅石灰袋、5个格子绿袋、3个透明绿松石袋、3个格子黄袋。”
-->函数应该返回 [pale lime, pale lime, pale lime, pale lime, plaid green, plaid green, plaid green, plaid green, plaid green, clear turquoise, clear turquoise, clear turquoise, plaid yellow, plaid yellow, plaid yellow]
此处“褪色的绿松石色”不相关,因此函数整体应跳过它-这意味着在返回“褪色的绿松石色”的arraylist中不会出现st=“褪色的绿松石色袋子包含3个镜像的银色袋子。”
-->函数应该返回 [mirrored silver bags, mirrored silver bags, mirrored silver bags]
这里“drab-magenta”是不相关的,所以函数整体应该跳过st=“drab-magenta包包含2个透明番茄包。”
-->函数应该返回 [clear tomato, clear tomato]
以此类推,当我尝试放置tostring()-newlist.add(list[i].split(“\s[0-9],\s”).tostring())--那么.add()就是一个错误。当listarray是string类型的array并得到“name color”时,我如何修复这个问题?它给我的是字符串而不是奇怪的数组十六进制字符串
如果您能帮助我,我们将不胜感激,同时也欢迎您帮助我改进问题或澄清我的解释。谢谢
4条答案
按热度按时间wlsrxk511#
String#split
返回一个String[]
. 如果您尝试直接打印它,您将得到类似的输出。可以使用打印数组Arrays.toString(array)
或者其他方式。下面是一个例子:输出:
在您的代码中,可以按如下方式放置此print语句:
但是,调试器应该能够显示如下所示的元素:
更新:
此更新基于op在以下评论中发布的另一项要求:
在一个例子中,它返回-[2深蓝]--我不想要数字2和空格,我想要它是[深蓝,深蓝]
输出:
6yt4nkrj2#
我不会给你整个实现,但我没有在那台机器上:)我想指出的是,你在正确的轨道上。不幸的是,您的解决方案太复杂了!与其多次返回包含相同字符串的数组,不如返回
Map<String, Integer>
. 这里有一些类似于我今天早些时候使用的代码。pbwdgjma3#
当您尝试将某个内容转换为字符串并获得类似于[ljava.lang.string@1786f9d5]使用@和一堆十六进制数字,这意味着您试图将对象转换为字符串,而该对象没有tostring()方法/函数。确保输入的是字符串,或者可以使用tostring()方法/函数转换为字符串。
svdrlsy44#
对于所需的输出,应尝试匹配而不是拆分:
同样的问题,但不同于其他人的方法,可能值得一看