我正在尝试编写一个可以打印两次字母的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");
}
}
答案 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!!!"