当前位置: 首页 > 知识库问答 >
问题:

跨函数连接字符串

高飞翮
2023-03-14

我正在开发一个程序,该程序将获取一个文本文件,并将数字从0-99转换为文字(即0)-

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中退出,但一旦返回main,就会丢失。如何跨函数将这些转换附加到字符串?

共有1个答案

燕翔飞
2023-03-14

我可以想出两种方法:

如果您想将fullString的值返回给您的main方法,我建议您修改转换ToWord使其具有返回类型String,如下所示:

static void convertToWord(char[] num, String fullString)

然后,该方法需要返回fullString而不是什么都不返回。

最后,将main方法中的返回值或convertToWord赋给一个变量,您可以在main中使用它。

或者,您可以将fullString声明为StringBuffer,并使用方法append()对其进行追加。

 类似资料:
  • 我有一个函数应用,定义如下 其中< code > let-test-this-in 和< code > let-test-this-out 是连接字符串为< code >“defaultendpointsprocol=”的存储帐户下现有存储队列的名称...;account name =…;AccountKey= ... "(直接从门户中的访问键-连接字符串复制而来)。我发布时生成的function

  • 问题内容: 为什么在这些情况下输出不同? ==> 印刷:2010年 ==> 打印:200 为什么第一个输出不是30?它与运算符优先级有关吗?就像首先将“ printing”和x连接在一起,然后将结果字符串和y连接在一起?我对么? 问题答案: 它的规则 我在下面显示从高到低的优先顺序: **如果运算符具有相同的优先级 ,* 则 此方法起作用 * 现在 :是字符串” :是Java中唯一将Number连

  • 问题内容: 我正在使用Oracle SQL开发人员版本3.0.04。我试图使用该功能将数据分组在一起。 但是,我不断收到错误消息, 我很确定输出可能会超过4000,因为这里提到的WEB_LINK是url stem和url query的串联值。 有没有解决的办法,或者还有其他选择吗? 问题答案: 由于聚合字符串的长度可以超过4000个字节,因此不能使用该函数。您可能会创建一个用户定义的集合函数,该函

  • 问题内容: 在vertica中有一个表:像这样测试: 如何使用聚合函数或如何编写查询以获取像这样的数据(vertica语法)? 问题答案: 首先,您需要为编译udx 。 然后,您可以执行如下查询: 使用rtrim摆脱最后一个’,’。 如果您需要以某种方式对聚合进行排序,则可能需要在嵌入式视图中或使用first进行选择/排序。

  • 今天,当使用和驱动程序操作中的数据时,出现了一个特殊的错误。我在中创建了以下SQL模式: 一个非常基本的表,其中包含类型为的数据blob。 然后,我尝试使用提供的函数执行简单的语句。这是: 突出显示的关键点出现在执行SQL INSERT语句的行上(实际上是一个数组的索引,我在该数组中存储了不同的测试。我不想在这里包含其他数据,因为它非常长且不相关)。我收到的错误是: 现在,如果我将更改为,则错误消

  • 问题内容: 我可以猜测浏览器已针对最新版本进行了优化,但是如何做到这一点呢?我们可以说串联字符串时最好使用吗? 更新资料 因此,在现代浏览器中,对字符串串联进行了优化,因此使用符号比要 串联 字符串时使用符号要快。 但是@Arthur指出,如果您实际上想使用分隔符连接字符串,则速度会更快。 问题答案: 浏览器字符串优化已更改了字符串串联图片。 Firefox是第一个优化字符串连接的浏览器。从1.0