gpt4 book ai didi

java - 读取字符并检查它们是否是数字

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

我正在尝试获取一种方法来检查符号 & 之后的字符是数字还是字母;如果是数字,则将其转换为二进制;如果它是一个字母,则设置为 16,并且如果使用不同的单词则加 1。问题是,出于某种原因,这对我不起作用。有什么建议么?

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

int i;

for (i=0; i<anyLines.length; i++) {
String input = anyLines[i];
String[] lines = input.split("\n");

int wordValue = 16;

Map<String, Integer> wordValueMap = new HashMap<String, Integer>();

for (String line : lines) {
// if line doesn't begin with &, then ignore it
if (!line.startsWith("&")) {
continue;
}

// remove &
line = line.substring(1);

Integer binaryValue = null;

if (line.matches("\\d+")) {
binaryValue = Integer.toBinaryString(131072 +
Integer.parseInt(anyLines[i])).substring(2,18);
}
else if (line.matches("\\w+")) {
binaryValue = wordValueMap.get(line);

if (binaryValue == null) {
binaryValue = wordValue;
wordValueMap.put(line, binaryValue);
wordValue++;
}
}
}
}

输入:

&4
...
&hello
...
&ok

输出:

(5 translated into binary) : 0000000000000100
...
(16 translated into binary)
...
(17 translated into binary, or 16+1)
<小时/>

这是您的方法的输出:

101
1001100
1001100
1001100
1001100
1001100
1001100
1001100
&5
1110110000010000
&hello
1110001100001000
&goodbye
1110101010001000
(NEXT)
&goodbye
1111000010001000
&hello
1110001110001000
&BILL
1110001100000110
&NEXT
1110101010000111
(BILL)
&BILL
1110101010000111

这是我正在阅读和循环的原始文本(anyLines[i],未经任何修改):

&5
var1
&hello
var2
&goodbye
var2
(NEXT)
&goodbye
var3
&hello
var4
&BILL
var5
&NEXT
var6
(BILL)
&BILL
var5

var 只是一个有值的变量。我已经处理好了这些。

<小时/>

这是我的尝试:

String input = "This is a test line\n"
+ "&hello\n"
+ "&4\n"
+ "&32";

String[] lines = input.split("\n");
int wordValue = 26;

Map<String, Integer> wordValueMap = new HashMap<String, Integer>();

for (String currentLine : lines)
{
if (!currentLine.startsWith("&"))
{
continue;
}

currentLine = currentLine.substring(1);
Integer value;

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

if(value == null)
{
int binaryValue = wordValue++;
wordValueMap.replace(currentLine, binaryValue);
/*
* This is just there to ensure that the print statement below doesn't have a
* null value.
*/
value = binaryValue;
}
}
else
{
System.out.println("Invalid input");
break;
}

System.out.println(Integer.toBinaryString(value));
}

最佳答案

您的代码存在很多问题。首先,您必须解析调用 toBinaryString() 后获得的值。

binaryValue = Integer.parseInt(Integer.toBinaryString(131072 +
Integer.parseInt(anyLines[i])).substring(2,18));

在该代码中使用 anyLines[i] 作为 parseInt() 函数的参数也是不正确的。从我看到的代码来看,anyLines[i]是一个包含newLines和其他内容的字符串,显然无法将其解析为整数。

下面的代码似乎可以工作。我更改了 HashMap 的存储方式,以便它存储常规整数,而不是尝试将二进制表示形式存储为整数值。

String input = "This is a test line\n"
+ "&hello\n"
+ "&4\n"
+ "&32";

String[] lines = input.split("\n");
int wordValue = 26;

Map<String, Integer> wordValueMap = new HashMap<String, Integer>();

for (String currentLine : lines)
{
if (!currentLine.startsWith("&"))
{
continue;
}

currentLine = currentLine.substring(1);
Integer value;

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

if(value == null)
{
int binaryValue = wordValue++;
wordValueMap.put(currentLine, binaryValue);
/*
* This is just there to ensure that the print statement below doesn't have a
* null value.
*/
value = binaryValue;
}
}
else
{
System.out.println("Invalid input");
break;
}

System.out.println(Integer.toBinaryString(value));
}

作为旁注,我希望您知道,如果数字后跟单词(例如句子),此操作将会失败。但如果您的输入永远不会有任何这些,那就不是问题。

关于java - 读取字符并检查它们是否是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133106/

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