我有一个程序可以从文件中读取并将文件的每一行添加为数组元素。我现在要做的是弄清楚如何编辑数组中的某些项目。
问题是我的输入文件看起来像这样
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;
}
}
答案 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