【问题标题】:How to count the characters of each line in a string and convert the number to a hex如何计算字符串中每一行的字符并将数字转换为十六进制
【发布时间】: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 这看起来确实像同一段代码,尽管他询问的错误似乎不同。无论如何,我认为不鼓励修改前一个问题(已经有一个赞成的答案)。如果您认为它是骗子,请标记它,但我不确定。

标签: java arrays indexing hex


【解决方案1】:
String msg = "Bruce Wayne,Batman,None,Gotham City,Robin,The Joker\n" +
         "Oliver Queen,Green Arrow,None,Star City,Speedy,Deathstroke\n" +
         "Clark Kent,Superman,Flight,Metropolis,None,Lex Luthor\n" + 
         "Bart Allen,The Flash,Speed,Central City,Kid Flash,Professor Zoom";

String[] lines = msg.split("\n");
for(Integer i = 1; i <= lines.length; i++){
    int numChars = 0;
    String[] toks = lines[i - 1].split(",");
    for(String tok : toks){
        numChars += tok.replaceAll(" ", "").length();
    }
    System.out.println("Line " + i.toString() + " beginning with " + 
            toks[0] + " and ending with " + toks[toks.length - 1] + 
            " contains " + Integer.toHexString(numChars) + 
            " characters." );
}

这将满足您的需求。请注意每行末尾的 \n ,这使它们成为行。不确定你的第二个循环是做什么的。

【讨论】:

    【解决方案2】:

    转身

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

    List<String> message = new ArrayList<>(); message.add("Bruce Wayne,Batman,None,Gotham City,Robin,The Joker"); .....

    for(int i = 0; i &lt; message.length(); i++) {

    for(String line : message){

    然后使用line 进行计数......

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2014-03-19
      • 2019-07-27
      • 2018-01-31
      • 1970-01-01
      • 2017-08-23
      • 2018-01-26
      • 2014-12-04
      相关资源
      最近更新 更多