[Webinar] Streamline your web hosting managementRegister Today

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

Invert the case of a mixed case string (can I use regex?)

Hi,

I have a string that contains a mixed bag of upper and lowercase letters.

I need to invert these (upper to lower, lower to upper) so my question is do I have to iterate through each letter and swap it or can I use a smaller, cleaner method (perhaps using a regex expression??).

Many thanks.

James.
0
JAMES
Asked:
JAMES
1 Solution
 
dkloeckCommented:
i gess you will have to iterate thrtough each char, because there is no method to invert the case of the letters in string
0
 
devsolnsCommented:
Put this in a method or what have you,

                string text = "SoMe CaMEL cAse TEXT.";
                char[] textarray = text.ToCharArray();
                for(int i = 0; i < textarray.Length; i++)
                {
                    if((int)textarray[i] >= 65 && (int)textarray[i] <= 90)
                        textarray[i] = (char)((int)textarray[i] + 32);
                    else if ((int)textarray[i] >= 97 && (int)textarray[i] <= 122)
                        textarray[i] = (char)((int)textarray[i] - 32);
                }
                string newText = new string(textarray);
0
 
NaishalCommented:
Regular Expression is basically to model the condition or pattern and use that RegEx to check the input and decide if that satisfies the pattern or condition you want it to.

If you dont want to compare string in turn, You can Consider the use of BitMasking going to the Byte Level.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
JAMESAuthor Commented:
OK - accepting there is no regex expression and no intrinsic method Dev's method works great - thank you!

Many thanks for your help dk but I am sure you will understand if i give the points to Dev for a such a detailed answer.

James.
0
 
pradeepsudharsanCommented:
     string s="ABcdEFgh";
                  char []c=s.ToCharArray();                  
                int c1=0;
                  for(c1=0;c1<c.Length;c1++)
                  {
                        
                        if(char.IsLower(c[c1]))
                              c[c1]=(char)((int)c[c1]-32);
                        else if(char.IsUpper(c[c1]))
                              c[c1]=(char)((int)c[c1]+32);
            
                  }
                  s=new string(c);
                  MessageBox.Show(s);
0
 
devsolnsCommented:
pradeepsudharsan & everyone,


my implementation of the method runs on average 60% faster than pradeepsudharsan version using the IsLower & IsUpper methods.


Test using 1 million iterations of a couple hundred length string.

-my version
1296 ms
1268 ms
1353 ms

avg:1305 milliseconds


-version using ToUpper & ToLower
2181 ms
2165 ms
2152 ms

avg:2166  milliseconds
0
 
devsolnsCommented:
Kinda suprised by the diff in speed.
0
 
JAMESAuthor Commented:
Thanks for the test results.
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now