java数组:拆分元素

时间:2018-03-15 18:39:47

标签: java arrays

我有一个程序可以从文件中读取并将文件的每一行添加为数组元素。我现在要做的是弄清楚如何编辑数组中的某些项目。

问题是我的输入文件看起来像这样

2
34, jon smith, 1990, Seattle
21, jane doe, 1945, Tampa

所以例如

artArray[0]

因此,如果我致电34, jon smith, 1990, Seattle,我会收到Seattle,但我想知道如果输入34的ID时如何更新import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ArtworkManagement { /** * @param args */ public static void main(String[] args) { String arraySize; try { String filename = "artwork.txt"; File file = new File(filename); Scanner sc = new Scanner(file); // gets the size of the array from the first line of the file, removes white space. arraySize = sc.nextLine().trim(); int size = Integer.parseInt(arraySize); // converts String to Integer. Object[] artArray = new Object[size]; // creates an array with the size set from the input file. System.out.println("first line: " + size); for (int i = 0; i < artArray.length; i++) { String line = sc.nextLine().trim(); // line.split(","); artArray[i] = line; } System.out.println(artArray[0]); sc.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ,那么可能会拆分数组中的每个元素都用逗号表示?或者使用多维数组代替?

import com.gargoylesoftware.htmlunit.BrowserVersion
import com.gargoylesoftware.htmlunit.*

isError = 0

def login() {

    cancelPage = cancelButton.click()

    form = cancelPage.getFormByName("loginForm");

    userField = form.getInputByName('j_username');
    passwordField = form.getInputByName('j_password');
    submitButton = page.getElementById("loginBtnId");
    cancelButton = page.getElementById("cancelBtnId");
    userField.setValueAttribute(username);
    passwordField.setValueAttribute(password);
    submitButton = page.getElementById("loginBtnId")

    submitButton.click()

}

try
{
    if (!url.startsWith("https"))
    {
        url = "https://" + url;
    }

    conn = new WebClient(javaScriptTimeout:10000)

    conn.waitForBackgroundJavaScript(10000)
    conn.waitForBackgroundJavaScriptStartingBefore(3000)
    conn.getOptions().setJavaScriptEnabled(true);
    conn.getOptions().setCssEnabled(false);
    conn.setAlertHandler(new AlertHandler() {

        void handleAlert(Page page,String errorMessage) {

            println "\nIn handleAlert routine"

            isError = isError + 1
            if (isError == 1) {
                login()
            }

        }

    });


    //get page
    page = conn.getPage(url)
    form = page.getFormByName("loginForm");

    //get username and password form input fields and submit button
    userField = form.getInputByName('j_username');
    passwordField = form.getInputByName('j_password');
    submitButton = page.getElementById("loginBtnId");
    cancelButton = page.getElementById("cancelBtnId");

    submitButton.click()

}
catch (Exception e)
{
  println "\nFAIL - Unexpected exception: " + e.getMessage();
  for (trace in e.getStackTrace())
  {
    println "\n\t" + trace;
  }
}

4 个答案:

答案 0 :(得分:1)

你几乎就在那里,但split返回一个数组,所以你需要一个数组数组。

您可以更改此行

Object[] artArray = new Object[size];

通过这个,你也可以使用String代替Object,因为这确实是一个字符串。

String[][] artArray = new Object[size][];

然后,您可以使用

将数组添加到数组数组中
artArray[i] = line.split();

最后使用两个索引访问它:

artArray[indexOfTheArray][indexOfTheWord]

另外如果你想打印数组,请使用:

System.out.println(Arrays.toString(artArray[0]));

答案 1 :(得分:0)

此行为在 String.split(String regex)(强调我的)中明确记录:

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

如果您希望包含那些尾随空字符串,则需要使用 String.split(String regex,int limit),并为第二个参数使用负值( limit ):

String[] array = values.split(",", -1);
or
String[] array = values.split(",");

所以

 1. array[0] equals to id  
 2. array[1] equals to artist name  
 3. array[2] equals to date 
 4. array[3] equals to location

答案 2 :(得分:0)

String[][] artArray = new String[size][];    
            System.out.println("first line: " + size);

            for (int i = 0; i < artArray.length; i++) {
                 String line = sc.nextLine().trim();
                 artArray[i] = new String[line.split(",").length()];
                 artArray[i]=line.split(",");
            }

答案 3 :(得分:0)

我认为您需要使用更好的数据结构来存储文件内容,以便以后可以轻松处理。这是我的建议:

List<String> headers = new ArrayList<>();
List<List<String>> data = new ArrayList<List<String>>();
List<String> lines = Files.lines(Paths.get(file)).collect(Collectors.toList());
//Store the header row in the headers list.
Arrays.stream(lines.stream().findFirst().get().split(",")).forEach(s -> headers.add(s));
//Store the remaining lines as words separated by comma
lines.stream().skip(1).forEach(s -> data.add(Arrays.asList(s.split(","))));

现在,如果您想更新第一行(行)中的城市(最后一列),您只需要:

data.get(0).set(data.get(0) - 1, "Atlanta"); //Replace Seattle with Atlanta