1

我之前的问题:Java - 行不一致时将文本文件导入数组

每次我尝试使用 .split 或 .indexOf 时,都会收到一条错误消息,内容如下:“无法在数组类型 String[] 上调用 split(String, int)”。Eclipse 没有太大帮助,建议我将其更改为 .length

我的代码:

import java.util.*;
import java.io.*;
public class Club 
{
Scanner ConsoleInput;
public int count;
public Club() throws IOException
{
    String clubtxt = ("NRLclubs.txt");
    int i;

    File clubfile = new File(clubtxt);

    if (clubfile.exists())
    {
        count = 0;
        Scanner inputFile = new Scanner(clubfile);
        i = 0;
        while(inputFile.hasNextLine())
        {
            count++;
            inputFile.nextLine();
        }
        String[] teamclub = new String[count];
        inputFile.close();
        inputFile = new Scanner(clubfile);
        while(inputFile.hasNext())
        {
            teamclub[i] = inputFile.nextLine();
            System.out.println(teamclub[i]);
            i++;
        }
        inputFile.close();
        SplitClubdata(teamclub, count);
    }
    else
    {
        System.out.println("\n" + "The file " + clubfile + " does not exist." + "\n");
    }

}
public void SplitClubdata(String[] teamclub, int count)
{
    String[] line = teamclub;
    int maxlines = count;
    count = 0;

            while(count <= maxlines)
            {
            // Split on commas but only make three elements
            String elements[] = line.split(",", 3);


            String names[] = new String[maxlines];
            String mascot[] = new String[maxlines];
            String aliases[] = new String[maxlines];
            // The first belongs to names
            names[count] = elements[0];
            // The second belongs to mascot
            mascot[count] = elements[1];
            // And the last belongs to aliases
            aliases[count] = elements[2];
            count++;
            }
}
}

有人对如何解决这个问题有任何想法吗?

4

4 回答 4

1

line是一个String数组,你不能调用split它。我认为你的意思是line[count].split(",", 3)

我还建议重组这个类并使用适当的技术:

  • 不要读取文件两次来获取count.
  • 使用一个ArrayList<Club>where Club 有字段 ( mascot,namealias)。

这是一个更清洁的版本:

package org.argaus.gwt.tls.portlet;

import java.util.*;
import java.io.*;

public class Club {

    private String name;
    private String mascot;
    private String alias;

    public Club(String name, String mascot, String alias) {
        this.name = name;
        this.mascot = mascot;
        this.alias = alias;
    }

    public static List<Club> ReadClubsFromFile() throws IOException {


        File clubfile = new File("NRLclubs.txt");
        List<Club> clubs = new ArrayList<Club>();
        if (clubfile.canRead()) {
            Scanner inputFile = new Scanner(clubfile);
            inputFile = new Scanner(clubfile);
            while (inputFile.hasNext()) {
                String[] parts = inputFile.nextLine().split(",", 3);
                clubs.add(new Club(parts[0], parts[1], parts[2]));

            }
            inputFile.close();
        }
        else {
            System.out.println("\n" + "The file " + clubfile + " does not exist." + "\n");
        }
        return clubs;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMascot() {
        return mascot;
    }

    public void setMascot(String mascot) {
        this.mascot = mascot;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }
}
于 2013-05-30T09:38:48.253 回答
0

方法indexOfsplit在 上不可用Arrays

可用于数组的字段/方法包括:

公共最终字段长度,其中包含数组的组件数。长度可以是正数或零。

公有方法clone,覆盖Object类中的同名方法,不抛出检查异常。数组类型 T[] 的克隆方法的返回类型是 T[]。

多维数组的克隆是浅的,也就是说它只创建一个新数组。子数组是共享的。

继承自类Object的所有成员;Object 唯一不被继承的方法是它的 clone 方法。

请参阅Java 规范

于 2013-05-30T09:37:27.760 回答
0

split 在 String 对象上调用,而不是在字符串数组上调用。

可能这是你应该做的:

// Split on commas but only make three elements
            String elements[] = line[count].split(",", 3);

代替

// Split on commas but only make three elements
            String elements[] = line.split(",", 3);
于 2013-05-30T09:37:11.817 回答
0

您正在尝试split()数组,您只能在 a 上调​​用这些方法String

while(count <= maxlines)
{
  // Split on commas but only make three elements
  String elements = line[count].split(",", 3);
  ...
于 2013-05-30T09:37:16.240 回答