又是一道面试题,我只想到两种方式:
第一种:循环字符串,判断每个字符串的类型,再根据类型对该字符进行操作(转大写、转小写、不变或舍弃)
static void Main(string[] args) { //大写转小写,小写转大写,数字保留,其他除外 string str = "Aa Bb 123!@#"; //测试字符串 string newStr = string.Empty; //用于存放新字符串 //循环字符串 foreach (char item in str) { if (item >= 'a' && item <= 'z') { //小写字母转大写 newStr += item.ToString().ToUpper(); } else if (item >= 'A' && item <= 'Z') { //大写字母转小写 newStr += item.ToString().ToLower(); } else if (item >= '0' && item <= '9') { //数字不变 newStr += item.ToString(); } } //打印 System.Console.WriteLine(newStr); System.Console.ReadLine(); }
第二种:将字符串转为byte[],循环byte[],使用ASCII码进行判断
static void Main(string[] args) { //大写转小写,小写转大写,数字保留,其他除外 string str = "Aa Bb 123!@#"; //测试字符串 string newStr = string.Empty; //用于存放新字符串 //字符串-->byte[] ASCIIEncoding ascii = new ASCIIEncoding(); byte[] bytes = ascii.GetBytes(str); //循环byte[] foreach (byte item in bytes) { //临时存放 byte[] temp = new byte[] { item }; if (item >= 97 && item <= 122) { //小写字母转大写 newStr += ascii.GetString(temp).ToUpper(); } else if (item >= 65 && item <= 90) { //大写字母转小写 newStr += ascii.GetString(temp).ToLower(); } else if (item >= 48 && item <= 57) { //数字不变 newStr += ascii.GetString(temp); } } //打印 System.Console.WriteLine(newStr); System.Console.ReadLine(); }
备注:数字,字母的ASCII码对照表
/* 0~9数字对应十进制48-57 a~z字母对应的十进制97-122十六进制61-7A A~Z字母对应的十进制65-90十六进制41-5A */
结果打印: