Java 在函数之间压缩字符串
我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为单词(即0->“零”,99->“九十九”)。我能够在一个函数中转换数字并将其附加到字符串中,但最终的sting输出不包含任何转换后的数字。代码如下:Java 在函数之间压缩字符串,java,string,append,concat,Java,String,Append,Concat,我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为单词(即0->“零”,99->“九十九”)。我能够在一个函数中转换数字并将其附加到字符串中,但最终的sting输出不包含任何转换后的数字。代码如下: static ArrayList<String> list; static void convertToWord(char[] num, String fullString) { //number to word : https://
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);
}
}
以下是输入文件中的三行:
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,该数字就会丢失。如何跨函数将这些转换附加到字符串中?我可以想出两种方法: 如果要将
fullString
的值返回到main
方法,我建议您修改convertToWord
,使其具有返回类型String
,如下所示:
static void convertToWord(char[] num, String fullString)
然后,该方法需要返回fullString,而不是什么也不返回
最后,将main方法中的返回值或convertToWord指定给一个变量,您可以在main
中使用它
或者,您可以将fullString声明为StringBuffer
,并使用方法append()
对其进行追加
static void convertToWord(char[] num, String fullString)