有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中拆分数组索引并将其存储到新数组中

我正在尝试输入一系列名称,并将它们存储到一个数组中,以便在需要时进行反转打印。比如说,

输入:

Bill Cosby[enter]   
Jack Bob[enter]

输出:

Cosby, Bill    
Jack, Bob    

这就是我解决这个问题的方法,我决定先将所有名称存储到一个数组(_StudentNames)中,然后计划在每个空间拆分数组,并将单独的名称存储到一个新数组(_StudentNamesSplit),该数组的大小将是原来的两倍。之后,当需要打印一个名字时,我只需做一些类似
out.print(_StudentNamesSplit[1] + ", " + _StudentNamesSplit[0]);

我知道我遇到的问题是,使用此代码,只有输入的姓氏才会存储到数组中

我愿意接受任何关于解决这个问题的建议,特别是一种完全不同的方法。如果有一种方法可以将名称用逗号反转存储到数组的一个元素中,那就太好了,但这可能有点高级了

    out.print("How many students are in the class? ");    
    int _numStudents = scanInt.nextInt();    
    String[] _StudentNames = new String[_numStudents];      
    String[] _StudentNamesSplit = new String[_numStudents * 2];     
    for (int i = 0; i < _numStudents; ++i)   
    {    
        _StudentNames[i] = scanString.nextLine();   
        _StudentNamesSplit = _StudentNames[i].split(" ");    
    }

共 (5) 个答案

  1. # 1 楼答案

    _StudentNamesSplit必须是多维数组:

    String[][] _StudentNamesSplit = new String[_numStudents][2]; 
    

    然后分割时,将分割结果放在索引i处:

    _StudentNamesSplit[i] = _StudentNames[i].split(" ");
    

    当你写学生名字时,你是这样做的:

    out.print(_StudentNamesSplit[studentIndex][1] + ", " + _StudentNamesSplit[studentIndex][0]);
    

    你也可以按照你最初设想的两倍大的阵列。它不起作用的原因是您将最后一次拆分的结果放在变量_StudentNamesSplit中,基本上替换了以前的数据。相反,您必须在数组中复制拆分结果。使用多维数组的方法要简单一些

  2. # 2 楼答案

    如果您只需要一个名称颠倒的数组(例如“Cosby,Bill”),那么以下简短片段就足够了:

    public static giveReversedNames(String[] names) {
        String[] reversedNames = new String[names.length];
        for (int i = 0; i < names.length; i++) {
            List<String> rev_pair = Collections.reverse(Arrays.asList(name.split(" ")));
            reversedNames[i] = Joiner.on(",").join(rev_pair);
        }
        return reversedNames;
    }
    

    我正在使用Collections#reverse()Joiner#join(),但是当然,您可以使用任何其他方法代替它们

  3. # 3 楼答案

    您不能用“,”按相反顺序组合字符串,并将其输入数组**\u StudentNamesSplit**。另外,由于无法确定数组的大小,我认为最好使用ArrayList来实现这一点。例如,你可以使用这样的东西

    Scanner sn= new Scanner(System.in);
    
        String unformatted_name;
        ArrayList<String> names=new ArrayList<String>();
        ArrayList<String> reverse_names=new ArrayList<String>();
        StringBuilder formatted_name = new StringBuilder();
    
        while(sn.hasNext()){
    
            unformatted_name=sn.nextLine();
            for (String retval: unformatted_name.split(" ", 2)){
                names.add(retval);
    
              }
    
            formatted_name.append(names.get(1).toString());
            formatted_name.append(',');
            formatted_name.append(names.get(0).toString());
    
            reverse_names.add(formatted_name.toString());
    
    
        }
    

    由于您不知道要输入多少行,最好使用ArrayList

  4. # 4 楼答案

    我建议你使用一个学生班(比如这个)——

    public static class Student {
      private String firstName;
      private String lastName;
    
      public void setFirstName(String firstName) {
        this.firstName = (firstName != null) ? firstName
            .trim() : "";
      }
    
      public void setLastName(String lastName) {
        this.lastName = (lastName != null) ? lastName
            .trim() : "";
      }
    
      public Student(String firstName, String lastName) {
        setFirstName(firstName);
        setLastName(lastName);
      }
    
      public Student(String[] names) {
        if (names != null && names.length == 2) {
          setFirstName(names[0]);
          setLastName(names[1]);
        }
      }
    
      public String toString() {
        return this.lastName + ", " + this.firstName;
      }
    }
    

    您可以这样使用它(注意,它现在是无界的,lastname, firstnameStudent.toString()方法处理-

    public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      List<Student> al = new ArrayList<Student>();
      try {
        System.out.println("Enter student names [firstname lastname], CTRL-D to stop.");
        String line;
        while ((line = scanner.nextLine()) != null) {
          if (line != null) {
            line = line.trim();
            String[] names = line.split(" ");
            if (names.length == 2) {
              al.add(new Student(names));
            }
          }
        }
      } finally {
        for (Student student : al) {
          System.out.println(student);
        }
        scanner.close();
      }
    }
    
  5. # 5 楼答案

    您只能使用一个数组来存储数据(它是否需要是数组?为什么不使用列表?)。然后,对输入的每个名称进行处理(就在输入时),并以所需格式存储它们。 然后,要打印所有元素,只需遍历数组并打印每个元素

    顺便说一下,数组中的每个元素都可以包含空格,因此不需要创建一个比要插入的元素数量大两倍的数组