I’m trying to read in a multi line string then split it then print it .. here is the string :
1T1b5T!1T2b1T1b2T!1T1b1T2b2T!1T3b1T1b1T!3T3b1T!1T3b1T1b1T!5T1*1T
11X21b1X
4X1b1X
When I split the string with ! I get this without the last line string :
1T1b5T
1T1b5T1T2b1T1b2T
1T2b1T1b2T1T1b1T2b2T
1T1b1T2b2T1T3b1T1b1T
1T3b1T1b1T3T3b1T
3T3b1T1T3b1T1b1T
1T3b1T1b1T5T1*1T
5T1*1T11X21b1X
11X21b1X
Here is my code :
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));
}
}
}
}
}
Where did I make the mistake, why is not reading in the last line? After I read in all lines properly I should go trough each line if I encounter number I should print the next char the n times the number I just read, but that is long way ahead first I need help with this. Thank you
UPDATE :
Here is how the output should look like :
1T1b5T
1T2b1T1b2T
1T1b1T2b2T
1T3b1T1b1T
3T3b1T
1T3b1T1b1T
5T1*1T
11X21b1X
4X1b1X
Here is a solution in C(my friend solved it not me), but I’d stil wanted to do it in 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;
}
I wrote already an answer, that was a solution. But you are asking what you are doing wrong.
What you are doing wrong is that you first
printlnthe result and then (Why? I don’t know. I think you also don’t know…) do aprintof each char in the result. So the result is that you have only one good line and the others are started by the previous line. So:You see? So begin with deleting your inner loop that prints each character.
When you did this: your output looks like this:
So this is the reason why you thought the foreach loop was the problem. If you look at the end of each outputline (your wrong output: posted in the question), you can see, it was correct.
Then you want in the output a blank line if there was one in the input. But like I wrote in my other answer:
Scanner does not really read the next line, but the next word. So you have to change it to
stdin.nextLine();Now it works!Finally, this is the code you need: