字符串相关算法

1、将字符串中的字符倒序

//使用reverse
String str = "abcdefg";
StringBuffer sb =new StringBuffer(str);
System.out.println(sb.reverse().toString());
//自定义方法1
public static String strReverse(String str) {
		StringBuffer sb = new StringBuffer();
		for(int i =str.length()-1;i>=0;i--) {
			sb.append(str.charAt(i));
		}
		return sb.toString();
	}

2、将一个字符串中前n个字符和后n个字符组成一个新的字符串

public static String newSubStr(String str,int n) {
		if(str.length()>n) {
			String start = str.substring(0, n);
			String end = str.substring(str.length()-n,str.length());
			String newStr = start + end;
			return newStr;
		}else {
			return str;
		}
	}

3、统计一个字符串中的字母、数字、空格、中文和标点的个数

public static int[] countCharater(String str) {
		char []strChar = str.toCharArray();
		int count[]=new int[5];
		int j=0;
		for(int i=0;i<str.length();i++) {
			if('a'<=strChar[i]&&strChar[i]<='z'||'A'<=strChar[i]&&strChar[i]<='Z') {
				count[0]++;
			}else if(strChar[i]>='0'&&strChar[i]<='9') {
				count[1]++;
			}else if(strChar[i]==' ') {
				count[2]++;
			}else {
				j++;
			}
		}
		int chineseNum = getChineseNum(str);
		int signNum = j-chineseNum;
		count[3]=chineseNum;
		count[4]=signNum;
		return count;
	}
 /**中文字符 */
    private int chCharacter = 0;
    
    /**英文字符 */
    private int enCharacter = 0;
    
    /**空格 */
    private int spaceCharacter = 0;
    
    /**数字 */
    private int numberCharacter = 0;
    
    /**其他字符 */
    private int otherCharacter = 0;
    
    /***
     * 统计字符串中中文,英文,数字,空格等字符个数
     * @param str 需要统计的字符串
     */
    public void count(String str) {
        if (null == str || str.equals("")) {
            System.out.println("字符串为空");
            return;
        }
        
        for (int i = 0; i < str.length(); i++) {
            char tmp = str.charAt(i);
            if ((tmp >= 'A' && tmp <= 'Z') || (tmp >= 'a' && tmp <= 'z')) {
                enCharacter ++;
            } else if ((tmp >= '0') && (tmp <= '9')) {
                numberCharacter ++;
            } else if (tmp ==' ') {
                spaceCharacter ++;
            } else if (isChinese(tmp)) {
                chCharacter ++;
            } else {
                otherCharacter ++;
            }
        }
        System.out.println("字符串:" + str + "");
        System.out.println("中文字符有:" + chCharacter);
        System.out.println("英文字符有:" + enCharacter);
        System.out.println("数字有:" + numberCharacter);
        System.out.println("空格有:" + spaceCharacter);
        System.out.println("其他字符有:" + otherCharacter);
    }

4、统计字符串中中文个数

	public static int getChineseNum(String str) {
		int count = 0;
		int strLen = str.length();
		byte[] bt = str.getBytes();
		int btLen = bt.length;
		count = btLen - strLen;
		return count/2;
	}
/***
     * 判断字符是否为中文
     * @param ch 需要判断的字符
     * @return 中文返回true,非中文返回false
     */
    private boolean isChinese(char ch) {
        //获取此字符的UniCodeBlock
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
        //  GENERAL_PUNCTUATION 判断中文的“号  
        //  CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号  
        //  HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号 
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == 
        Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS 
               || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A 
               || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B 
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION 
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS 
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
            System.out.println(ch + " 是中文");
            return true;
        }
        return false;
    }
    
    public static void main(String[] args) {
        String str = "adbs13姿z势12年概~3!a @x # $率 论zs12 szsgss  1234@#¥
        說說愛き ,。?!%……&*()——{}【】";
        CountCharacter countCharacter = new CountCharacter();
        countCharacter.count(str);
        
    }

5、统计一个字符串在另一个字符串中出现的次数

public static int getPatternRepeatNum(String a, String b) {
		int num = 0;
		String str = a;
		int index = a.indexOf(b);
		while (index != -1) {
			num++;
			str = str.substring(index + b.length());
			index = str.indexOf(b);
		}
		return num;
	}
public static int getPatternRepeatNum2(String a,String b) {
		int num = 0;
		String str = a;
		int index = a.indexOf(b,0);
		while(index!=-1) {
			num++;
			index = str.indexOf(b,index+b.length());
		}
		return num;
	}

6、判断一个字符串是不是回文

public static boolean isPalindrome(String str) {
		char[] ch = str.toCharArray();
		boolean flag = false;
		for (int i = 0; i < ch.length; i++) {
			if (i == ch.length - 1) {
				flag = true;
			} else if (ch[i] == ch[ch.length - i - 1]) {
				continue;
			} else {
				break;
			}
		}
		return flag;
	}
public static boolean isPalindrome2(String str) {
		char[] ch = str.toCharArray();
		int count=0;
		boolean flag = false;
		for (int i = 0; i < ch.length/2; i++) {
			if (ch[i] == ch[ch.length - i - 1]) {
				count++;
				continue;
			} else {
				break;
			}
		}
		if (count == ch.length/2) {
			flag = true;
		}else{
			flag = false;
		}
		return flag;
	}

7、 消除一个字符串中重复的字符

public static String removeRepeatedChar(String str) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < str.length(); i++) {
			char c=str.charAt(i);//根据下标得到字符
			String s=String.valueOf(c);//转换成字符串
			if (sb.indexOf(s) == -1) {
				sb.append(s);
			}
		}
		return sb.toString();
	}

8、统计一个字符串数组中以指定字符串结尾的字符串个数

public int countEndStr(String str[], String s) {
		int count = 0;
		for (int i = 0; i < str.length; i++) {
			if (str[i].endsWith(s)) {
				count++;
			}
		}
		return count;
	}

9、将一个字符串中字符降序排列,组成新的字符串

public String sortByDesc(String str) {
		char charArr[] = str.toCharArray();
		for (int i = 1; i < charArr.length; i++) {
			for (int j = 0; j < charArr.length - i; j++) {
				if (charArr[j] < charArr[j + 1]) {
					char temp = charArr[j + 1];
					charArr[j + 1] = charArr[j];
					charArr[j] = temp;
				}
			}
		}
		StringBuffer sb=new StringBuffer();
		for (int i = 0; i < charArr.length; i++) {
			sb.append(charArr[i]);
		}
		return sb.toString();
	}

10、给一个属性名,获得一个标准的get方法名

public String getFunctionName(String str){
		str="get"+str.substring(0,1).toUpperCase()+str.substring(1);
		return str;
		
	}

11、给一个标准的set方法名,获得属性名

public String getAttributeName(String str){
		str=str.substring(3,4).toLowerCase()+str.substring(4);
		return str;
	}

12、将一个字符串中的英文空格和逗号替换为中文空格和逗号

public String replaSign(String str){
		str=str.replace(" ", " ");
		str=str.replace(",", ",");
		return str;
	}

13、将一个字符串中字符向左移动一个位置,第一个字符移至最后一个位置

public String moveString(String str){
		char charArr[]=str.toCharArray();
		char temp=charArr[0];
		for(int i=1;i<charArr.length;i++){
			charArr[i-1]=charArr[i];
		}
		charArr[charArr.length-1]=temp;
		str="";
		for(int i=0;i<charArr.length;i++){
			str+=charArr[i];
		}
		return str;
	}

14、统计一个字符串中,每一个英文单词的使用频度

public void countUseRate(String str,int[] countArr){
		String[] strArr=str.split(",");	//把字符串拆分成字符串数组	
		StringBuffer sb=new StringBuffer();
		for (int i = 0; i < strArr.length; i++) {			
			if(sb.indexOf(strArr[i])==-1){//判断该字符串在sb中有没有,如果没有表示没有统计过该字符串
				int count=0;//统计有几个
				for (int j = i; j < strArr.length; j++) {
					if(strArr[i].equals(strArr[j])){//如果两个值相等
						count++;
					}
				}
				countArr[i]=count;
				sb.append(strArr[i]);//把统计过的字符串放到sb中,不再统计
			}
		}
		System.out.println(sb.toString());
	   
	}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jerryzhou;

您的鼓励,将是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值