Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在函数之间压缩字符串_Java_String_Append_Concat - Fatal编程技术网

Java 在函数之间压缩字符串

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://

我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为单词(即0->“零”,99->“九十九”)。我能够在一个函数中转换数字并将其附加到字符串中,但最终的sting输出不包含任何转换后的数字。代码如下:

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)