Java 从文本文件一次向araylist添加3个字符的最有效方法是什么?
假设您有一个带有“abcdefghijklmnop”的文本文件,您必须一次向字符串类型的数组列表中添加3个字符。因此,数组列表的第一个单元格将有“abc”,第二个单元格将有“def”,依此类推,直到输入所有字符Java 从文本文件一次向araylist添加3个字符的最有效方法是什么?,java,arraylist,text-files,Java,Arraylist,Text Files,假设您有一个带有“abcdefghijklmnop”的文本文件,您必须一次向字符串类型的数组列表中添加3个字符。因此,数组列表的第一个单元格将有“abc”,第二个单元格将有“def”,依此类推,直到输入所有字符 public ArrayList<String> returnArray()throws FileNotFoundException { int i = 0 private ArrayList<String> list = new ArrayL
public ArrayList<String> returnArray()throws FileNotFoundException
{
int i = 0
private ArrayList<String> list = new ArrayList<String>();
Scanner scanCharacters = new Scanner(file);
while (scanCharacters.hasNext())
{
list.add(scanCharacters.next().substring(i,i+3);
i+= 3;
}
scanCharacters.close();
return characters;
}
public ArrayList returnArray()引发FileNotFoundException
{
int i=0
private ArrayList list=new ArrayList();
扫描仪扫描字符=新扫描仪(文件);
while(scanCharacters.hasNext())
{
添加(scanCharacters.next().substring(i,i+3);
i+=3;
}
scanCharacters.close();
返回字符;
}
public ArrayList returnArray()引发FileNotFoundException
{
private ArrayList list=new ArrayList();
扫描仪扫描字符=新扫描仪(文件);
字符串temp=“”;
while(scanCharacters.hasNext())
{
temp+=scanCharacters.next();
}
而(温度长度()>2){
添加(临时子字符串(0,3));
温度=温度子串(3);
}
如果(温度长度()>0){
列表。添加(临时);
}
scanCharacters.close();
退货清单;
}
在本例中,我读取了文件中的所有数据,然后将其分为三组进行解析。Scanner永远不会回溯,因此使用next将在使用过程中忽略部分数据。您将获得一组单词(由空格分隔,Java的默认分隔符),然后将前3个字母分为子字符串。
即:
亚历克西·沃扎曼
将给你:
啤酒和哇
我的示例的工作方式是,它将所有的字母都放在一个字符串中,并不断地从三个字母中提取子字符串,直到没有更多的字母为止,最后,它添加剩余的字母。正如其他人所说,最好使用不同的数据解析器(如BufferedReader)进行读取。此外,我建议您研究子字符串和扫描仪如果您想继续使用当前方法。请使用以下代码
ArrayList<String> list = new ArrayList<String>();
int i = 0;
int x = 0;
Scanner scanCharacters = new Scanner(file);
scanCharacters.useDelimiter(System.getProperty("line.separator"));
String finalString = "";
while (scanCharacters.hasNext()) {
String[] tokens = scanCharacters.next().split("\t");
for (String str : tokens) {
finalString = StringUtils.deleteWhitespace(str);
for (i = 0; i < finalString.length(); i = i + 3) {
x = i + 3;
if (x < finalString.length()) {
list.add(finalString.substring(i, i + 3));
} else {
list.add(finalString.substring(i, finalString.length()));
}
}
}
}
System.out.println("list" + list);
ArrayList list=new ArrayList();
int i=0;
int x=0;
扫描仪扫描字符=新扫描仪(文件);
使用分隔符(System.getProperty(“line.separator”);
字符串finalString=“”;
while(scanCharacters.hasNext()){
String[]tokens=scanCharacters.next().split(“\t”);
for(字符串str:tokens){
finalString=StringUtils.deleteWhitespace(str);
对于(i=0;i
这里,我使用了Apache String UTILS的String Untrys.DeleTeWeleStEp(STR)来删除文件toksn中的空白空间,并且在for循环中检查IF条件以检查字符串中是否有三字符的字符串,如果它没有留下任何字符,它将转到列表。 第一行和第二行的asdfcshgfser ajsnsdxs sasdsd fghfdgfd
执行程序后,结果如下:列表[asd、fcs、hgf、ser、ajs、nsd、xs、sas、dsd、fgh、fdg、fd]除了边界检查之外,您的代码有什么问题?什么是
字符
首选扫描仪在这里不是合适的选择。@JarrodRoberson,为什么您认为扫描仪不适合读取文件?而且他也可以通过在扫描仪上使用合适的分隔符轻松地得到他想要的东西……谢谢您的帮助建议。如果我遗漏了什么,一定要告诉我。
ArrayList<String> list = new ArrayList<String>();
int i = 0;
int x = 0;
Scanner scanCharacters = new Scanner(file);
scanCharacters.useDelimiter(System.getProperty("line.separator"));
String finalString = "";
while (scanCharacters.hasNext()) {
String[] tokens = scanCharacters.next().split("\t");
for (String str : tokens) {
finalString = StringUtils.deleteWhitespace(str);
for (i = 0; i < finalString.length(); i = i + 3) {
x = i + 3;
if (x < finalString.length()) {
list.add(finalString.substring(i, i + 3));
} else {
list.add(finalString.substring(i, finalString.length()));
}
}
}
}
System.out.println("list" + list);