Question about StringBuilder?
I'm currently working on a program which is pig Latin. It allows a user enter a sentence. The program would take the user input and change every word in to pig latin which it takes the first character of a word and add it to end of word with "ay". For instance, bog would be "ogday" This is what I have been done so far
import java.util.Scanner;
public class PigLatinTest
{
public static void main(String[] args)
{
Scanner kybd = new Scanner(System.in);
System.out.println("Please enter a sentence?");
String enSentence = kybd.nextLine();
//StringBuilder buffer = new StringBuilder(enSentence);
}
public static String convertToLatin(String s)
{
StringBuilder buffer = new StringBuilder();
String [] sentence = s.split("");
String k ="ay";
for (String i:sentence)
{
buffer.insert(buffer.lastIndexOf(i), buffer.charAt(0));
buffer.insert(buffer.lastIndexOf(i), k);
buffer.delete(0,2);
}
}
}
I wonder whether I did my convertToLatin correct or not? My other question is after the for loop loop each word, will the data in sentence array change? Or do I need to store the change into other array in order to access the change data?
Thank you so much.
nickliutw
Junior Poster in Training
65 posts since Feb 2011
Reputation Points: 27
Solved Threads: 0
I wonder whether I did my convertToLatin correct or not?
Well, did you test it? What was the result?
JamesCherrill
Posting Genius
6,371 posts since Apr 2008
Reputation Points: 2,130
Solved Threads: 1,073
No, it won't work. Can you provide some hints or similar examples that would help me to create the method to convert English into pig latin? This is what I have so far. For your information, I test the code already. it won't work. I have been trying for several hours.
import java.util.Scanner;
public class PigLatinTest
{
public static void main(String[] args)
{
Scanner kybd = new Scanner(System.in);
System.out.println("Please enter a sentence?");
String enSentence = kybd.nextLine();
String r = convertToLatin(enSentence );
System.out.println(r);
}
public static String convertToLatin(String s)
{
String [] sentence = s.split("");
StringBuilder buffer = new StringBuilder(sentence.toString() );
String k ="ay";
int i =0;
for (i:buffer.charAt(i))
{
if(1>=i.length())
return i;
else
{
buffer.insert(buffer.lastIndexOf(i), buffer.charAt(0));
buffer.insert(buffer.lastIndexOf(i), k);
buffer.delete(0,2);
}
}
return buffer.toString();
}
}
nickliutw
Junior Poster in Training
65 posts since Feb 2011
Reputation Points: 27
Solved Threads: 0
I'm not sure how to edit it. But I think I need to rework my logic a bit. Can you provide some clues or hints? My thought so far is I need to use the split method in string class(that is what the specification say) to slip every word in a sentence and store into a array. Then use the stringbuilder to change the characters orders. Then return the string. In my main method I can just call the method and convert it and print it.
nickliutw
Junior Poster in Training
65 posts since Feb 2011
Reputation Points: 27
Solved Threads: 0
Okay. I'm running to compiler error say that it cannot find symbol, but I already define and initialize.
import java.util.Scanner;
public class TestProgram
{
public static void main(String[] args)
{
//Using the scanner input
Scanner input = new Scanner(System.in);
System.out.println("\nType a sentence in English: ");
String english = input.nextLine();
String [] sentence = english.split(" ");
String k;
for (int b=0; b < sentence.length; b++)
k = new StringBuilder().append(sentence[b]).append("").toString();
for (int p=0; p< k.length(); p++)
k.insert(k.lastIndexOf(p), k.charAt(0));
k.insert(k.lastIndexOf(p), k);
k.delete(0,2);
//String Str = pigLatin(english);
//System.out.println(Str);
}
}
The compiler mark at k.insert() and say cannot find symbol k. But I already define k and initialize above the for loop. Why it is marking it wrong?
nickliutw
Junior Poster in Training
65 posts since Feb 2011
Reputation Points: 27
Solved Threads: 0
k is defined as a String. There is no insert method in the String class.
JamesCherrill
Posting Genius
6,371 posts since Apr 2008
Reputation Points: 2,130
Solved Threads: 1,073
Thanks now I have everything working now.
nickliutw
Junior Poster in Training
65 posts since Feb 2011
Reputation Points: 27
Solved Threads: 0