Reverse words inside an array of characters without creating an extra array.
public int reverseW(char[] seq) {
int point =0, left = 0, right = 0;
char tmp = '\0';
while(point < seq.length) {
if(seq[point] == ' ' || point == seq.length-1) {
if(seq[point] == ' ') right = point-1;
else right = point;
while(left < right) {
tmp = seq[left];
seq[left] = seq[right];
seq[right] = tmp;
left++;
right--;
}
left = point+1;
}
point++;
}
System.out.println(Arrays.toString(seq));
return 0;
}
Reverse words in string
///////////////////////////////////////////////////////
// Reverse Words
public class Example
{
public void reverseWordInMyString(String str)
{
/* The split() method of String class splits
* a string in several strings based on the
* delimiter passed as an argument to it
*/
String[] words = str.split(" ");
String reversedString = "";
for (int i = 0; i < words.length; i++)
{
String word = words[i];
String reverseWord = "";
for (int j = word.length()-1; j >= 0; j--)
{
/* The charAt() function returns the character
* at the given position in a string
*/
reverseWord = reverseWord + word.charAt(j);
}
reversedString = reversedString + reverseWord + " ";
}
System.out.println(str);
System.out.println(reversedString);
}
public static void main(String[] args)
{
Example obj = new Example();
obj.reverseWordInMyString("Welcome to BeginnersBook");
obj.reverseWordInMyString("This is an easy Java Program");
}
}
//////////////////////////
public class StringFormatter {
public static String reverseWord(String str){
String words[]=str.split("\\s");
String reverseWord="";
for(String w:words){
StringBuilder sb=new StringBuilder(w);
sb.reverse();
reverseWord+=sb.toString()+" ";
}
return reverseWord.trim();
}
}
public static boolean isPalindromeString(String originalString)
{
String reverse = StringUtils.reverse(originalString);
return originalString.equals(reverse);
}
// Reverse WORDS solutions //////////////////////////////////////////
public boolean isPunkt(String s) {
return s.equals(".") || s.equals(",") || s.equals("!");
}
public boolean isPunkt(char c) {
return c=='.' || c==',' || c=='!';
}
public String reverseWords(String s) {
// Leetcode 151
// Given an input string s, reverse the order of the words.
// Note that s may contain leading or trailing spaces or multiple spaces
// between two words. The returned string should only have a single
// space separating the words. Do not include any extra spaces.
String[] words = s.trim().replaceAll(" +", " ").split(" ");
StringBuilder reverse = new StringBuilder("");
for(int i=words.length-1; i>=0; i--){
reverse.append(words[i] + " ");
}
return reverse.toString().trim();
}
public String reverseWords2(String s) {
// Given an input string s, reverse the order of the words.
// Live punktuation as is
String[] words = s.trim().replaceAll(" +", " ").split(" ");
StringBuilder reverse = new StringBuilder("");
int left = 0, right = words.length-1;
String tmp = "", rightP = "", leftP = "";
while(left < right) {
rightP = words[right].substring(words[right].length()-1);
leftP = words[left].substring(words[left].length()-1);
tmp = words[left];
words[left] = words[right];
words[right] = tmp;
if(isPunkt(leftP))
words[right] = tmp.substring(0, tmp.length()-1);
if(isPunkt(rightP)) {
words[right] = words[right]+rightP;
words[left] = words[left].substring(0, words[left].length()-1);
}
if(isPunkt(leftP)) {
words[left] = words[left]+leftP;
}
left++;
right--;
}
for(int i=0; i < words.length; i++){
reverse.append(words[i]+" ");
}
return reverse.toString().trim();
}
public String reverseWords3(String s) {
// Given an input string s, reverse the order of the words.
// Live punktuation as is using HashMap
String[] words = s.trim().replaceAll(" +", " ").split(" ");
StringBuilder reverse = new StringBuilder("");
Map<Integer, String> punkt = new HashMap<Integer, String>();
String tmp = "";
for(int i=0; i < words.length; i++){
tmp = words[i].substring(words[i].length()-1);
if(isPunkt(tmp)) {
words[i] = words[i].substring(0, words[i].length()-1);
punkt.put(words.length-1-i, tmp);
}
}
for(int i=words.length-1; i>=0; i--){
if(punkt.containsKey(i)) {
reverse.append(words[i]+punkt.get(i)+" ");
} else {
reverse.append(words[i]+" ");
}
}
return reverse.toString().trim();
}
public int reverseWStr(String s) {
// Given an input string s, reverse THE WORDS in it.
// Live punktuation as is using Char Array
char[] seq = s.toCharArray();
int point =0, left = 0, right = 0;
char tmp = '\0';
while(point < seq.length) {
if(seq[point] == ' ' || point == seq.length-1) {
if(seq[point] == ' ') right = point-1;
else right = point;
while(left < right) {
tmp = seq[right];
if(!isPunkt(tmp)) {
seq[right] = seq[left];
seq[left] = tmp;
left++;
}
right--;
}
left = point+1;
}
point++;
}
//System.out.println(Arrays.toString(seq));
System.out.println(String.valueOf(seq));
return 0;
}
Using Stack
String description = "Java technology blog for smart java concepts and coding practices";
// reverse string builder
StringBuilder reverseString = new StringBuilder();
// Put words from String in Stack
Stack<String> myStack = new Stack<>();
StringTokenizer tokenizer = new StringTokenizer(description, " ");
while (tokenizer.hasMoreTokens()) {
myStack.push(tokenizer.nextToken());
}
//Pop each word from stack and append in builder
while (!myStack.empty()) {
reverseString.append(myStack.pop() + " ");
}
System.out.println(reverseString.toString());