gpt4 book ai didi

java - 将一种方法的输出替换为另一种方法的输出

转载 作者:行者123 更新时间:2023-12-01 15:50:22 24 4
gpt4 key购买 nike

所以我有这个方法应该读取文件并检测符号后面的字符是数字还是单词。如果是数字,我想删除它前面的符号,将数字翻译成二进制并替换到文件中。如果是一个单词,我想首先将字符设置为数字16,但随后,如果使用另一个单词,我想在原始数字上添加1。

这是我正在使用的输入:

这是我的方法:

    try {
ReadFile files = new ReadFile(file.getPath());
String[] anyLines = files.OpenFile();

int i;


int wordValue = 16;

// to keep track words that are already used
Map<String, Integer> wordValueMap = new HashMap<String, Integer>();

for (String line : anyLines) {

if (!line.startsWith("@")) {
continue;
}

line = line.substring(1);

Integer binaryValue = null;

if (line.matches("\\d+")) {
binaryValue = Integer.parseInt(line);
}
else if (line.matches("\\w+")) {
binaryValue = wordValueMap.get(line);



// if the map doesn't contain the word value, then assign and store it
if (binaryValue == null) {
binaryValue = wordValue;
wordValueMap.put(line, binaryValue);
++wordValue;
}
}

// --> I want to replace with this
System.out.println(Integer.toBinaryString(binaryValue));


}


for (i=0; i<anyLines.length; i++) {

// --> Here are a bunch of instructions that replace certain strings - they are the lines after @ symbols <--
// --> I'm not going to list them ... <--

System.out.println(anyLines[i]);

所以问题是,如何按顺序替换那些以 ("@"逐行) 开头的行?

我基本上希望输出如下所示:

101
1110110000010000
10000
1110001100001000
10001
1110101010001000
10001
1111000010001000
10000
1110001110001000
10010
1110001100000110
10011
1110101010000111
10010
1110101010000111

最佳答案

不太明白逻辑。如果您只是想按顺序替换所有 @ 符号,为什么不按顺序将所有数字读入 List 中,直到看到 @ 符号。然后您可以开始按 List 中的顺序替换它们(或 Queue 因为您需要先进先出)。这满足您的要求吗?

如果您必须保留 wordValueMap,则下面的代码应在填充 wordValueMap 后循环遍历各行并将其写入控制台。它使用与您最初填充 map 相同的逻辑,并输出应替换的值。

boolean foundAt = false;
for (i=0; i<anyLines.length; i++) {

// --> Here are a bunch of instructions that replace certain strings - they are the lines after @ symbols <--
// --> I'm not going to list them ... <--

if (anyLines[i].startsWith("@")) {
foundAt = true;
String theLine = anyLines[i].substring(1);
Integer theInt = null;
if (theLine.matches("\\d+")) {
theInt = Integer.parseInt(theLine);
}
else {
theInt = wordValueMap.get(anyLines[i].substring(1));
}

if(theInt!=null) {
System.out.println(Integer.toBinaryString(theInt));
}
else {
//ERROR
}
}
else if(foundAt) {
System.out.println(anyLines[i]);
}
}

当我运行这个循环时,我得到了您从问题中寻找的输出:

101
1110110000010000
10000
1110001100001000
10001
1110101010001000
10001
1111000010001000
10000
1110001110001000
10010
1110001100000110
10011
1110101010000111
10010
1110101010000111

我希望这会有所帮助,但请看看我上面的问题,看看您是否可以以更直接的方式做到这一点。

关于java - 将一种方法的输出替换为另一种方法的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com