【问题标题】:Appending a string at the end of each word of an input string in Java [duplicate]在Java中输入字符串的每个单词的末尾附加一个字符串[重复]
【发布时间】:2018-03-11 18:36:51
【问题描述】:

我对 Java 比较陌生,但我正在努力掌握它!

所以在我的作业中,我被要求从用户(字符串)获取输入,并在输入字符串的每个单词的末尾附加一个单词。我可能错过了一些东西,因为我无法弄清楚这么简单的东西。

例如, 我们从用户那里得到输入

这就是我喜欢的方式

我希望它是:

这喵喵喵喵喵喵喵喵喵喵喵喵喵喵

我不能使用任何 if/for/while 语句/循环来解决这个问题,但是,我可以使用 Java String Class API

这是我目前的代码

public class Exercise2 {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("Please enter a string : ");
        String userString = scan.nextLine();

        String inputString = "meow";

        //I'm aware that for the next like concatenating is just adding
        //the word meow with the last word of the userString.
        String newString = userString.concat(inputString);

        scan.close();
    }
}

问题:如何获得所需的输出?

【问题讨论】:

  • 您必须将该字符串标记为单词,附加后缀,然后将它们重新组合在一起。你能做到每一步吗?
  • 对不起,是的,基本上我如何获得所需的输出^^'
  • “单词”是如何定义的?在Yes of course. 中是course.(末尾带有点)是“单词”或course(不带点)。
  • @lexicore 如果您指的是标点符号,我不必担心。
  • @GeekyMeow 您应该定义什么是“单词”。用空格分隔的东西?

标签: java string append string-concatenation


【解决方案1】:

这个问题已经有很多答案了,但据我所知,没有一个是正确的。要么它不适用于多个空格(因为每个空格都替换为"meow ")。或者多个空格被替换为"meow " - 因此空格或丢失。或者末尾的空格(或没有空格)没有正确处理。

所以这是我的看法:

    String userString = "This is  how   I    like    it";
    System.out.println(userString.replaceAll("([^\\s])(\\s|$)", "$1meow$2"));

结果:

Thismeow ismeow  howmeow   Imeow    likemeow    itmeow

我假设“单词”是由空格字符或字符串的开头或结尾分隔的非空格字符序列。那么“单词”的最后一个字符是一个非空格字符,后面紧跟一个空格字符或字符串结尾。这可以通过正则表达式([^\s])(\s|$) 检测到。第一组将代表单词的最后一个字符,第二组 - 后面的空格或字符串结尾。

所以要将meow 附加到每个单词,我们可以将它插入单词的最后一个字符和后面的空格/字符串结尾之间。这就是$1meow$2 所做的。 $1 引用正则表达式中的第一组(单词的最后一个字符),$2 - 第二组(空格/字符串结尾)。

喵。

【讨论】:

  • 但是,题外话:我只需要补充一下,假设这个词也是一个单独的字符串中的输入,即String inputString,从用户那里扫描,在这种情况下,你会怎么样写下来?因为在$1meow$2 中,$1 & $2 指的是正则表达式 & 用 " " 括起来,如果你使用变量 inputString 则不能使用它
  • "$1" + inputString + "$2?
  • 是的,效果很好。谢谢!
【解决方案2】:

你可以使用replaceAll

userString = userString + " ";
userString =userString.replaceAll("\\s+"," ");  // removing multiple spaces
userString = userString.replaceAll(" ","meow ");

要使其适用于最后一个单词,您需要在末尾附加 ' '

是的,trim() 最后一个空格,是最开始添加的。

【讨论】:

  • 对最后一个字不起作用。
  • @lexicore 我们可以在末尾追加空格。
  • 如果字符串包含双空格,则不起作用。
  • @lexicore OP 没有设置这么多条件。我们可以照顾所有这些情况。对吗?
  • @lexicore 希望它能解决您的所有问题?
猜你喜欢
  • 2015-09-21
  • 2021-12-16
  • 2019-08-25
  • 2020-08-15
  • 2017-04-12
  • 2014-09-18
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多