读取字符串后,将int位置设置为该行

时间:2019-04-04 06:48:57

标签: java

编辑:正如某些人所问,我将尝试使其更加清晰。用户将一个值(任何值)插入文本框。这被保存为result int。问题在于找到正确的行以将字符串插入到用户可能做出的每个选择中。

我试图通过文件中的循环插入字符串,而现在,我正在通过int使用位置(行号)的静态声明。问题在于,如果迭代次数发生变化,则字符串不会插入正确的位置。

在下面的代码中,result表示要插入的字符串数,如用户在文本框中所写。

for (int a = result; a >= 1; a--) {    
        Path path = Paths.get("ScalabilityModel.bbt");
        List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

        int position = 7; 
        String extraLine = "AttackNode" + a;   

        lines.add(position, extraLine);
        Files.write(path, lines, StandardCharsets.UTF_8);
        }

我想将“ int position = 7”更改为position =“ begin Attack Nodes” + 1(以便将字符串插入包含我要查找的字符串的行下方的行。< / p>

最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

根据问题中的注释,假设用户要添加2行(例如)。如果用户在输入框中添加“ 2”。

如果我缺少某些东西,请在评论中提及。

一种获取方法是:

public static void main(String[] args) throws IOException {

    // Assuming the user input here
    int result = 2;
    for (int a = result; a >= 1; a--) {
        Path path = Paths.get("ScalabilityModel.bbt");
        List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

        // Used CopyOnWriteArrayList to avoid ConcurrentModificationException
        CopyOnWriteArrayList<String> myList = new CopyOnWriteArrayList<String>(lines);

        // taking index to get the position of line when it matches the string
        int index = 0;
        for (String string : myList) {
            index = index + 1;
            if (string.equalsIgnoreCase("AttackNode")) {
                myList.add(index, "AttackNode" + a);
            }
        }
        Files.write(path, myList, StandardCharsets.UTF_8);
    }
}

答案 1 :(得分:0)

我将文件的读取移到循环之外,并创建了要添加的行的列表。由于我不确定要与哪个字符串匹配,因此为此添加了变量searchString,因此只需替换它或为其分配正确的值即可。

Path path = Paths.get("ScalabilityModel.bbt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
String searchString = "abc";

List<String> newLines = new ArrayList<>();
for (int i = 0; i < result; i++) {
  String extraLine = "AttackNode" + (result - i);
  newLines.add(extraLine);
}

for (int i = 0; i < lines.size(); i++) {
  if (lines.get(i).contains(searchString)) { //Check here can be modified to equeals, startsWith etc depending on the search pattern
    if (i + 1 < lines.size()) {
      lines.addAll(i + 1, newLines);
    } else {
      lines.addAll(newLines);
    }
    break;
  } 
}