【发布时间】:2015-06-12 18:27:03
【问题描述】:
我这里有一个叫做消息的字符串。
Bruce Wayne,Batman,None,Gotham City,Robin,The Joker
Oliver Queen,Green Arrow,None,Star City,Speedy,Deathstroke
Clark Kent,Superman,Flight,Metropolis,None,Lex Luthor
Bart Allen,The Flash,Speed,Central City,Kid Flash,Professor Zoom
我需要计算每行中的字符数并以十六进制打印。
- 第一行应该是(从布鲁斯到小丑)2b
- 第二行应该是(从 Oliver 到 Deathstroke)32
- 第三行应该是(从 Clark 到 Luthor)2e
- 第四行应该是(从 Bart 到 Zoom)36
package com.raghav.conversion;
import java.util.ArrayList;
public class StringToHex {
public static void Main(String[] args) {
String message = "Bruce Wayne,Batman,None,Gotham City,Robin,The Joker" +
"Oliver Queen,Green Arrow,None,Star City,Speedy,Deathstroke" +
"Clark Kent,Superman,Flight,Metropolis,None,Lex Luthor" +
"Bart Allen,The Flash,Speed,Central City,Kid Flash,Professor Zoom";
ArrayList<String> lines = new ArrayList<String>();
ArrayList<Integer> chars = new ArrayList<Integer>();
ArrayList<String> hex = new ArrayList<String>();
String line = "";
int c = 0;
for(int i = 0; i < message.length(); i++) {
lines.add(message.charAt(i), line);
line = line.replaceAll(",", "".replaceAll(" ", ""));
c = line.length();
chars.add(c);
hex.add(Integer.toHexString(c));
}
for (int i = 0; i < hex.size(); i++) {
String padded = "00000000".substring(hex.size()) + hex.get(i);
System.out.println(padded);
}
}
}
这是我目前所拥有的,但我在第 22 行收到了 ArrayIndexOutOfBoundsException lines.add(message.charAt(i), line);
有人可以帮帮我吗?谢谢。
【问题讨论】:
-
对于初学者来说,“消息”中没有任何换行符;这都是一条运行线。
-
你应该重新考虑你的逻辑。首先,请注意您的信息是一条大线。行尾没有换行符。你没有把它分成几行。您没有计算每行中的字符。而变量
line什么都不包含。因此,请尝试计划每个步骤并重新编写它。 -
特定的例外是由于您对
add的调用-查看API 文档docs.oracle.com/javase/7/docs/api/java/util/… ..该特定调用在指定索引处添加了一个元素,但您的列表大小从0开始-该调用适用于 ArrayList 中已经存在索引的情况 - 无需指定索引,您可以add(element),但是一旦您解决了该问题,您会发现更远的地方存在类似的索引问题在你的代码中。 -
你不是已经问过here这个问题了吗?你为什么不编辑你原来的问题?
-
@sstan 这看起来确实像同一段代码,尽管他询问的错误似乎不同。无论如何,我认为不鼓励修改前一个问题(已经有一个赞成的答案)。如果您认为它是骗子,请标记它,但我不确定。