java加倍字符/三倍字符

时间:2016-02-19 03:06:45

标签: java

我正在尝试编写一个可以打印两次字母的Java程序;除了“!”之外,所有其他字符(如空格,数字和标点符号)都应单独保留。这应该是三倍。我的程序只加倍所有字符,所以我不太清楚现在该做什么,因为我不熟悉Java。

这是我到目前为止所做的:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter a line of text.");
    String myStr = scan.nextLine();
    if (myStr.length()>0){
        String answer = "";
        for(int j=0; j<myStr.length(); j++){
            char ch = myStr.charAt(j);
            answer = answer + ch + ch;
        }
        System.out.println(answer);
    }
    else {
        System.out.println("Please enter a string longer than 0 characters");
    }
}

5 个答案:

答案 0 :(得分:0)

非常简单你可以这样做:使用正则表达式,不需要任何循环

只需编辑此行:

String answer = myStr.replaceAll("(\\p{Alpha}|(!))", "$1$1$2");

<强>用法:

public static void main(String[] args) throws Exception {
    Scanner scan = new Scanner(System.in);
    System.out.println("Please enter a line of text.");
    String myStr = scan.nextLine();
    if (myStr.length()>0){
        String answer = myStr.replaceAll("(\\p{Alpha}|(!))", "$1$1$2");
        System.out.println(answer);
    }
    else {
        System.out.println("Please enter a string longer than 0 characters");
    }
}

结果: 这正是您想要的。

Input: abc234&@!ff
Output: aabbcc234&@!!!ffff

答案 1 :(得分:0)

这样的事情如何,将每一行用作IntStream,因为char值只是整数;

String myStr = scan.nextLine().chars()
    .flatMap(ch -> {
        if (ch == '!') {
            return IntStream.of(ch, ch, ch);
        } else if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
            return IntStream.of(ch, ch);
        }
        return IntStream.of(ch);
    })
    .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
    .toString();

使用Java流程非常有用,而且非常有趣

答案 2 :(得分:0)

你可以这样做:

unordered_map

一种相当直接的方法,它与您目前正在做的事情相关。检查字符是否为字母,打印两次。如果是String str = "abc!123"; for(int x=0; x<str.length(); x++) if(str.substring(x, x+1).matches("[a-zA-Z+]")) //if is alphabet System.out.print(str.substring(x, x+1) + str.substring(x, x+1)); else if (str.substring(x, x+1).equals("!")) System.out.print("!!!"); else System.out.print(str.substring(x, x+1)); ,则打印3次。否则打印相应的角色一次。

<强>输入:

!

<强>输出:

abc!123

答案 3 :(得分:0)

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(InputEditText, InputMethodManager.SHOW_FORCED);

结果 原文:abc! 9 aabbcc !!! 9

答案 4 :(得分:0)

字符的简单for循环将执行此操作。假设您可能希望结果不是简单打印,则返回结果的转换方法会更好。如果需要,这也将允许单元测试。

private static String transform(CharSequence input) {
    StringBuilder buf = new StringBuilder(input.length());
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        buf.append(ch);
        if (ch == '!')
            buf.append(ch).append(ch);
        else if (Character.isLetter(ch))
            buf.append(ch);
    }
    return buf.toString();
}

<强>测试

System.out.println(transform("abc234&@!ff"));
System.out.println(transform("He said: \"You can't do that!\""));
来自Ideone

输出

aabbcc234&@!!!ffff
HHee ssaaiidd: "YYoouu ccaann'tt ddoo tthhaatt!!!"