Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 185
  • Last Modified:

Core Java. String manipulation. In given string swap specific characters.

There is a word. You need to swap ( replace by each other ) first letter "m" and the last letter "p" . Also you should consider the possibility that such letters won't be in a given word.



For example :

test1.
input : mamapapa
output: pamapama

test2
input: enormous
output: sorry there isn't any "p" letter in the word

test3
input: place
output: sorry there isn't any "m" letter in the word.

Many thxs in advance !
0
SunnyX
Asked:
SunnyX
  • 5
  • 4
  • 2
  • +2
3 Solutions
 
gurpsbassiCommented:
Homework exercise?
0
 
SunnyXAuthor Commented:
no
0
 
zzynxSoftware engineerCommented:
Tell me in words (in pseudo code) how you would proceed with this task.
1
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
SunnyXAuthor Commented:
There isn't any optimization requirements here yet. So I come up with some simple idea. Please, help me to implement it.

1. First of we should take some method / function that help as to treat String like a char vector .
 mamapapa = > [ m, a, m, a, p, a, p, a ] 

Open in new window

2. then we implement loop to search for first "m" and remember index of this letter ... when the letter is detected break the loop
int i =0;
( for i ; i < ourCharVector.length() ; ++i ) 
{
(if ourCharVector[i] = "m" || ourCharVector[i] = "M")
{
break ; 
}
}

Open in new window


3. then second loop for detecting "p", because we need last one we shouldn't break at of loop
it will be something like

int k = 0 ; 
( for int j = 0 ; j < ourCharVector.length() ; ++j ) 
{
(if ourCharVector[i] = "p" || ourCharVector[i] = "P")
{
k = j ; 
}
}

Open in new window


4. after we detected indexes of needed letter we should implement some swap function or some buffer vector ...
outCharVector[i] = outBufferVector [0];
outCharVector[k] = outBufferVector [1];

Open in new window


5. and swap it
outCharVector[i] = outBufferVector [1];
outCharVector[k] = outBufferVector [0];

Open in new window


6. convert charvector to string again + handle exception somewhere ( if there is "m/p" ,  do something )...

Zzynx, I really wanna find better / more optimal solution to the problem. Actually,  this is the first that come to my mind, please, help. Thanks you for your time !
0
 
zzynxSoftware engineerCommented:
I think you should keep it as simple as possible.

Use these two String methods to find the index of the first occurrence of 'm' and the index of the last occurrence of 'p':

indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character.
(cf. https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int))

lastIndexOf(int ch)
Returns the index within this string of the last occurrence of the specified character
(cf. https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#lastIndexOf(int))

Remark that this methods return -1 if the character doesn't occur.

Assume we have stored the result in the variables 'indexOfM' and 'indexOfP'.
(I guess you know what condition to output "Sorry there isn't any "p" letter in the word" or "sorry there isn't any "m" letter in the word")

If that is not the case, you can build up a StringBuffer, by adding all characters you find in the initially given string until you encounter index == indexOfM. If you encounter that index, you add a 'p'. You go on. If you encounter index == indexOfP you add a 'm'. Then you go on adding the rest of the characters.
Now the StringBuffer contains the requested result, so return yourStringBuffer.toString() and you're done.
1
 
mccarlIT Business Systems Analyst / Software DeveloperCommented:
A slight variation to what @zzynx wrote above, use the indexOf methods mentioned but then you can use String.toCharArray to get a mutable array, set the new chars in the correct indexes and then use the correct String constructor to convert the array back to a String
1
 
awking00Commented:
You might also consider using a StringBuilder with its deleteCharAt() and insert() methods -
StringBuilder sb = new StringBuilder("mamapapa");
midx = sb.indexOf("m");
pidx  = sb.lastIndexOf("p");
            if (midx >= 0 && pidx >= 0) {
                  sb.deleteCharAt(pidx).insert(pidx, "m");
                  sb.deleteCharAt(midx).insert(midx, "p");
                  System.out.println(sb.toString());
            }
            if (midx < 0) {
                  System.out.println("Sorry, there is no m in the string");
            }
            if (pidx < 0) {
                  System.out.println("Sorry, there is no p in the string");
            }
1
 
SunnyXAuthor Commented:
Thx to everybody ! much appreciated !
0
 
SunnyXAuthor Commented:
Thx you once  again !
0
 
zzynxSoftware engineerCommented:
You're welcome. Thanx 4 axxepting.

However, it's a pitty and frustrating that someone posting full code - which I didn't want to do because of the nature of the question - based on my initial idea get most of the points.
1
 
SunnyXAuthor Commented:
Sorry it's my fault, I should clarify that your code will be much appreciated.
0
 
awking00Commented:
zzynx, I only posted full code because SunnyX flatly said, "no" when asked if this homework exercise, although I agree the question did have that feel.
1
 
zzynxSoftware engineerCommented:
Sorry it's my fault, I should clarify that your code will be much appreciated.
??? I didn't post any code.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
  • 4
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now