【问题标题】:Java Arrays- transforming string with spaces into an arrayJava Arrays - 将带空格的字符串转换为数组
【发布时间】:2009-11-25 16:38:55
【问题描述】:
public class MatrixMultiply{

    public static void main(String[] args) {
        main();
    }


    static void main() {
        int[] vec = { 1, 2, 3, 4, 5 };
        System.out.println( mean( vec ) );
    }

    static int mean(int[] v) {
        int total = 0;

        for (int i = 0 ; i < v.length ; i++ ) {
            total = total + v[i];
        }
        return total / v.length;
    }
}

上述方法有效,但我不想说“int[] vec = { 1, 2, 3, 4, 5 };” 我想创建类似的东西:

String w = "1 2 3 4 5"; 

然后计算出 w 的平均值。 我怎样才能到达 w 并做到这一点?

【问题讨论】:

    标签: java arrays string


    【解决方案1】:

    如果你确定数字是用空格分隔的,我想你应该使用 foreach 和 w.split(" ");和 Integer.parseInt();像这样:

    double sum=0;
    
    for(String str : w.split(" ")) {
        sum += Integer.parseInt(str);
    }
    
    return sum / w.split(" ").length;
    

    编辑:将 int sum 替换为 double sum,以保留分数的实际结果,而不仅仅是整数部分。

    【讨论】:

      【解决方案2】:

      看看 java.util.Scanner。

      类似的东西(未经测试,就在我的脑海中):

      Scanner scanner;
      
      scanner = new Scanner("1 2 3 4 5 6");
      
      while(scanner.hasNextInt())
      {
          final int x;
      
          x = scanner.nextInt();
          total += x;
      }
      

      我会为你的程序做:

      导入 java.util.ArrayList; 导入 java.util.List; 导入 java.util.Scanner;

      公共类主要 { 公共静态无效主要(最终字符串[] argv) { 最终 int[] vec; 最终浮点平均值;

          vec       = toIntArray("1 2 3 4 5 6");
          meanValue = mean(vec);
      
          System.out.println("mean = " + meanValue);
      }
      
      private static float mean(final int[] vec)
      {
          int total = 0;
      
          for(final int val : vec)
          {
              total += val;
          }
      
          return ((float)total) / ((float)vec.length);
      }
      
      
      private static int[] toIntArray(final String value)
      {
          final Scanner       scanner;
          final List<Integer> list;
          final int[]         vec;
      
          scanner = new Scanner(value);
          list    = new ArrayList<Integer>();
      
          while(scanner.hasNextInt())
          {
              final int val;
      
              val = scanner.nextInt();
              list.add(val);
          }
      
          vec = new int[list.size()];
      
          for(int i = 0; i < list.size(); i++)
          {
              vec[i] = list.get(i);
          }
      
          return (vec);
      }
      

      }

      【讨论】:

      • +1:我什至没有意识到 Scanner 有一个接受字符串的构造函数。
      • 谢谢 :D 因为我是菜鸟,所以我在实现这一点时遇到了一些困难,我该怎么做呢?
      【解决方案3】:

      您可以使用 Java 的 StringTokenizer-- 类来获取单个标记,然后使用 Integer 类将它们视为整数。

      抱歉,请改用.split

      来自 API 文档:

      StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
      

      【讨论】:

      • "StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人使用 String 的 split 方法或 java.util.regex而是打包。"
      • 谢谢,我刚刚在文档中读到了,正在编辑我的答案。
      【解决方案4】:
      string.split(" ").map(_.toInt) sum
      

      哦,对不起,那是 Scala。来点 Java!

      String[] arr = string.split(" ")
      int sum = 0;
      for (s : arr) sum += Integer.parseInt(s);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多