如何让程序在连字符后打印一个单词的反转?

时间:2016-02-26 04:13:24

标签: java string loops reverse

我完成了相反的部分,但我对连字符有困难。任何帮助表示赞赏!此外,到目前为止的代码。

<canvas id="canvas" width="300" height="250"></canvas>

<hr/>
<h1>Images used:</h1>

<img src="https://images.blogthings.com/thecolorfulpatterntest/pattern-4.png"/>

<img src="http://www.printmag.com/wp-content/uploads/Sillitoe-black-white.gif"/>

示例输入:

public static void main(String[] args) {
    Scanner kbd = new Scanner(System.in);
    System.out.print( "Enter a string of words that contains a hyphen: ");
    String word = kbd.next();
    for (int i = word.length()-1; i >= 0; i--) {            
          System.out.print(word.charAt(i));    
    }
}

必需的输出:

low-budget

4 个答案:

答案 0 :(得分:2)

这是我能想到的最简单的解决方案(ofc还有其他更好的解决方案,但这是我的实现:

public static void main(String[] args) {

    Scanner kbd = new Scanner(System.in);
    System.out.print( "Enter a string of words that contains a hyphen: ");
    String word = kbd.next();

    int loc = word.indexOf('-');    //Here I am trying to find the location of that hyphen

    for (int i = word.length()-1; i > loc; i--) { //Now print the rest of the String in reverse TILL that location where we found hyphen. Notic i > loc           
        System.out.print(word.charAt(i));    
    }

        System.out.print(" ");

    for (int i = loc + 1; i < word.length(); i++) { //Now print the original String starting after the hyphen. Notice int i = loc + 1
        System.out.print(word.charAt(i));    
    }
}

答案 1 :(得分:2)

我会这样做(在一行中):

System.out.println(new StringBuilder(word.replaceAll(".*-", "")).reverse());

边缘案件免费处理:

  • 如果没有连字符,则整个字符串反转打印
  • 如果有多个连字符,则使用最后一个连字符。要使用第一个,请将匹配正则表达式更改为"^.*?-"
  • 如果字符串为空白,则打印空白

考虑没有需要编写的所有代码来处理这些(有效的)输入案例

分解其工作原理:

  1. word.replaceAll(".*-", "")将所有匹配项替换为正则表达式.*-,这意味着&#34;所有内容(包括(最后)连字符&#34;),空白 - 有效删除匹配
  2. new StringBuilder(...)使用传递给构造函数的String(从第1点)创建一个StringBuilder。我们需要StringBuilder的唯一原因是使用reverse()方法(String没有它)
  3. reverse()撤销StringBuilder的内容并将其准备好以便进行下一次通话(请参阅Fluent Interface
  4. 将非字符串传递给System.out.println会导致String.valueOf()在对象上调用,而对象又调用对象toString()方法,StringBuilder返回内容
  5. 瞧!

答案 2 :(得分:2)

这是一个基于Java 8流的(一行)基于流的解决方案:

word.chars().skip(word.indexOf('-') + 1).mapToObj(c -> String.valueOf((char)c))
  .reduce("", (a, b) -> b + a).ifPresent(System.out::println);

边缘案件处理:

  • 方便的是,如果没有连字符,则整个字符串将反向打印。这是因为indexOf(char)在未找到的情况下返回-1,因此最终结果是跳过零(-1 + 1
  • 如果存在多个连字符,则只会使用第一个连字符来分割单词
  • 空白字符串不打印任何内容,因为chars()流为空

要在输入为空白时打印空白,请改用此代码:

System.out.println(word.chars().skip(word.indexOf('-') + 1)
  .mapToObj(c -> String.valueOf((char)c)).reduce("", (a, b) -> b + a));

请注意使用reduce()方法的替代形式,其中传入空白("")的标识值,用于空流的情况以保证减少结果。

答案 3 :(得分:1)

首先,根据-拆分它。 然后,反过来第二部分......

    String s = "low-budget";
    String[] t = s.split("-");
    for (int i = t[1].length() - 1; i >= 0; --i) {
        System.out.print(t[1].charAt(i));
    }