我要读取一个多行字符串,然后对其进行分割并打印出来。以下是字符串:
1T1b5T!1T2b1T1b2T!1T1b1T2b2T!1T3b1T1b1T!3T3b1T!1T3b1T1b1T!5T1*1T
11X21b1X
4X1b1X
当我使用
!
分割字符串时,我得到了以下结果(不包括最后一行的字符串):1T1b5T
1T1b5T1T2b1T1b2T
1T2b1T1b2T1T1b1T2b2T
1T1b1T2b2T1T3b1T1b1T
1T3b1T1b1T3T3b1T
3T3b1T1T3b1T1b1T
1T3b1T1b1T5T1*1T
5T1*1T11X21b1X
11X21b1X
以下是我的代码:
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner stdin = new Scanner(new BufferedInputStream(System.in));
while (stdin.hasNext()) {
for (String line : stdin.next().split("!")) {
System.out.println(line);
for (int i = 0; i < line.length(); i++) {
System.out.print(line.charAt(i));
}
}
}
}
}
我在哪里犯了错误,为什么最后一行没有读取?当我正确地读取所有行之后,如果我遇到数字,我应该打印下一个字符,然后再次打印刚刚读取的数字n次,但这是很长的路要走,首先我需要帮助。谢谢。
更新:
以下是输出的样子:
1T1b5T
1T2b1T1b2T
1T1b1T2b2T
1T3b1T1b1T
3T3b1T
1T3b1T1b1T
5T1*1T
11X21b1X
4X1b1X
这里有一个C语言的解决方案(是我的朋友解决的,不是我),但我仍然想用JAVA来完成:
#include <stdio.h>
int main (void)
{
char row[134];
for (;fgets (row,134,stdin)!=NULL;)
{
int i,j=0;
for (i=0;row[i]!='\0';i++)
{
if (row[i]<='9'&&row[i]>='1')
j+=(row[i]-'0');
else if ((row[i]<='Z'&&row[i]>='A')||row[i]=='*')
for (;j;j--)
printf ("%c",row[i]);
else if (row[i]=='b')
for (;j;j--)
printf (" ");
else if (row[i]=='!'||row[i]=='\n')
printf ("\n");
}
}
return 0;
}