【问题标题】:How to convert an int array to String with toString method in Java [duplicate]如何在Java中使用toString方法将int数组转换为String [重复]
【发布时间】:2012-06-09 22:04:14
【问题描述】:

我正在尝试使用toString(int[]) 方法,但我认为我做错了:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html#toString(int[])

我的代码:

int[] array = new int[lnr.getLineNumber() + 1];
int i = 0;

System.out.println(array.toString());

输出是:

[I@23fc4bec

我也试过这样打印,但是:

System.out.println(new String().toString(array));  // **error on next line**
The method toString() in the type String is not applicable for the arguments (int[])

我从更大更复杂的代码中提取了这段代码,但如果需要我可以添加它。但这应该提供一般信息。

我正在寻找输出,例如在 Oracle 的文档中:

字符串表示由数组元素的列表组成,括在方括号(“[]”)中。相邻元素由字符“,”(逗号后跟一个空格)分隔。

【问题讨论】:

    标签: java arrays tostring


    【解决方案1】:

    你想要的是Arrays.toString(int[]) 方法:

    import java.util.Arrays;
    
    int[] array = new int[lnr.getLineNumber() + 1];
    int i = 0;
    
    ..      
    
    System.out.println(Arrays.toString(array));
    

    对于每种不同的原始 Java 类型,都有一个静态的 Arrays.toString 辅助方法; int[] says this的那个:

    public static String toString(int[] a)
    

    返回指定数组内容的字符串表示形式。字符串表示由数组元素的列表组成,括在方括号 ("[]") 中。相邻元素由字符", "(逗号后跟一个空格)分隔。元素通过String.valueOf(int) 转换为字符串。如果a 为空,则返回"null"

    【讨论】:

    • 从 "[x, y, z]" 返回数组或列表的最简单方法是什么?
    • @nerdistcolony 没有什么比 Arrays.toString 更干净了 - 但请参阅 stackoverflow.com/questions/456367/… 以获得一些建议。
    • @Sbodd - 我想出了一个基于 ArrayList 的示例并发布了答案。它专门针对我需要为我正在移植的应用程序解决的问题,但可能会节省一些时间。
    【解决方案2】:
    System.out.println(array.toString());
    

    应该是:

    System.out.println(Arrays.toString(array));
    

    【讨论】:

      【解决方案3】:

      非常同意@Patrik M,但 Arrays.toString 的问题在于它包括 "[""]""," 在输出中。因此,我将简单地使用正则表达式将它们从 outout 中删除,就像这样

      String strOfInts = Arrays.toString(intArray).replaceAll("\\[|\\]|,|\\s", "");
      

      现在你有了一个可以解析回java.lang.Number的字符串,例如,

      long veryLongNumber = Long.parseLong(intStr);
      

      或者你可以使用 java 8 流,如果你讨厌正则表达式,

      String strOfInts = Arrays
                  .stream(intArray)
                  .mapToObj(String::valueOf)
                  .reduce((a, b) -> a.concat(",").concat(b))
                  .get();
      

      【讨论】:

      • 正则表达式真的很讨厌......
      【解决方案4】:

      你可以使用java.util.Arrays:

      String res = Arrays.toString(array);
      System.out.println(res);
      

      输出:

      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      

      【讨论】:

      • 如何从此输出中检索 int[] 数组。
      【解决方案5】:

      数组上的 toString 方法只打印出你得到的内存地址。 您必须遍历数组并自行打印出每个项目

      for(int i : array) {
       System.println(i);
      }
      

      【讨论】:

        【解决方案6】:

        使用我描述的here 实用程序,您可以更好地控制您为数组获取的字符串表示形式。

        String[] s = { "hello", "world" };
        RichIterable<String> r = RichIterable.from(s);
        r.mkString();                 // gives "hello, world"
        r.mkString(" | ");            // gives "hello | world"
        r.mkString("< ", ", ", " >"); // gives "< hello, world >"
        

        【讨论】:

          【解决方案7】:

          此函数以字符串形式返回一个 int 数组,如“6097321041141011026”

          private String IntArrayToString(byte[] array) {
                  String strRet="";
                  for(int i : array) {
                      strRet+=Integer.toString(i);
                  }
                  return strRet;
              }
          

          【讨论】:

          • 出于性能原因,最好使用 StringBuilder 而不是直接字符串连接
          【解决方案8】:

          这是一个从字符串列表到单个字符串,再返回到字符串列表的示例。

          编译:

          $ javac test.java
          $ java test
          

          跑步:

          初始名单: “ABC” “定义” “吉” “jkl” “mno” 作为单个字符串: “[abc, def, ghi, jkl, mno]” 重组清单: “ABC” “定义” “吉” “jkl” “mno”

          源代码:

          import java.util.*;
          public class test {
          
              public static void main(String[] args) {
                  List<String> listOfStrings= new ArrayList<>();
                  listOfStrings.add("abc");
                  listOfStrings.add("def");
                  listOfStrings.add("ghi");
                  listOfStrings.add("jkl");
                  listOfStrings.add("mno");
          
                  show("\nInitial list:", listOfStrings);
          
                  String singleString = listOfStrings.toString();
          
                  show("As single string:", singleString);
          
                  List<String> reconstitutedList = Arrays.asList(
                       singleString.substring(0, singleString.length() - 1)
                            .substring(1).split("[\\s,]+"));
          
                  show("Reconstituted list:", reconstitutedList);
              }
          
              public static void show(String title, Object operand) {
                  System.out.println(title + "\n");
                  if (operand instanceof String) {
                      System.out.println("    \"" + operand + "\"");
                  } else {
                      for (String string : (List<String>)operand)
                          System.out.println("    \"" + string + "\"");
                  }
                  System.out.println("\n");
              }
          }
          

          【讨论】:

          • 没人要这个。
          • @Roberto 它使用了相关技术(数组方法),我提供它是为了补充与数组转换相关的人们的 int 相关答案,即使它显示字符串,因为我知道已经有 int 相关的解决方案。 . 没有理由对它投反对票和沾沾自喜。不妨先在这附近做点好事,然后再去诋毁其他人。
          • 不,你错了。第一句话阐明了目的,并且足够相关。在考虑对其他用户进行废话之前,先贡献一些有用的东西。除了让别人的情况变得更糟之外,你什么也没做。
          猜你喜欢
          • 2014-03-03
          • 2016-06-02
          • 2020-01-01
          • 2011-11-30
          • 2011-10-16
          • 1970-01-01
          • 2013-04-23
          相关资源
          最近更新 更多