【发布时间】:2021-02-15 08:18:28
【问题描述】:
我正在开发一个程序,它将获取一个文本文件并将数字从 0 - 99 转换为单词(即 0 ->“零”,99 ->“九十九”)。我能够转换数字并将它们附加到一个函数中的字符串,但最终的字符串输出不包含任何转换后的数字。代码如下:
static ArrayList<String> list;
static void convertToWord(char[] num, String fullString)
{
//number to word : https://www.geeksforgeeks.org/convert-number-to-words/
String[] single_digits = new String[]{ "zero", "one",
"two", "three", "four",
"five", "six", "seven",
"eight", "nine"};
String[] two_digits = new String[]{"", "ten", "eleven", "twelve",
"thirteen", "fourteen",
"fifteen", "sixteen", "seventeen",
"eighteen", "nineteen"};
String[] tens_multiple = new String[]{"", "", "twenty", "thirty", "forty",
"fifty","sixty", "seventy",
"eighty", "ninety"};
int len = num.length;
if (len == 0)
{
System.out.println("Error");
return;
}
if (len == 1)
{
fullString += single_digits[num[0] - '0'];
return;
}
if (len > 2)
{
System.out.println("No numbers greater than 99");
return;
}
int x = 0;
while (x < num.length)
{
if (num[x] - '0' == 1)
{
int sum = num[x] - '0' +
num[x] - '0';
fullString += two_digits[sum];
return;
}
else if (num[x] - '0' == 2 &&
num[x + 1] - '0' == 0)
{
fullString += "twenty";
return;
}
else
{
int i = (num[x] - '0');
if(i > 0)
fullString += tens_multiple[i]+" ";
else
fullString += "";
++x;
if (num[x] - '0' != 0)
fullString += single_digits[num[x] - '0'];
}
++x;
}
System.out.println(fullString);
}
public static void main(String[] args) throws FileNotFoundException
{
/* read each element of file as a separate member of array:
https://stackoverflow.com/questions/28643680/java-storing-each-word-from-an-input-file-in-an-array-of-strings */
String fullString = "";
Scanner s = new Scanner(new File("C:/Users/Zach/Desktop/Fall 2020/Java_Kotlin/java-kotlin-zpheesaker/KattisNumberstoWords/app/input.txt"));
list = new ArrayList<String>();
while(s.hasNext())
{
String token = s.next ();
list.add(token);
}
for (int i = 0; i < list.size(); i++)
{
// check if number by regex: https://stackoverflow.com/questions/18590901/check-if-a-string-contains-numbers-java
if(list.get(i).matches(".*\\d.*"))
{
convertToWord(list.get(i).toCharArray(), fullString);
}
else {
fullString += (list.get(i) + " ");
}
}
System.out.println(fullString);
}
}
这里有几行输出(每行 - 是不同的 system.out 行):
-Piqued favour twenty three
-Piqued favour stairs it enable exeter as seeing. Remainder met improving but forty one
-Piqued favour stairs it enable exeter as seeing. Remainder met improving but engrossed sincerity age. Better but seventy eight
这是输入文件中的那三行:
Piqued favour 23 stairs it enable exeter as seeing.
Remainder met improving but 41 engrossed sincerity age.
Better but 78 length denied abroad are.
如您所见,该数字已附加并打印在函数 convertToWord 中的 system.out 中,但一旦我返回 main 就丢失了。如何跨函数将这些转换附加到字符串?
【问题讨论】: