Java算法解析3—————对字符串相关算法

一:根据某种规则缩短字符串

/*
 * 根据规则缩短字符串
 */
public class Dome07 {
	public static void main(String[] args) {
		String str = "C:\\Windows\\Resources\\Themes\\aero";
		while (true) {
			System.out.println(str);
			int endIndex = str.lastIndexOf("\\");
			// 截取字符串
			str = str.substring(0, endIndex);
			//substring(start,end)方法的范围:[start,end)
			if (str.indexOf("\\") == -1) {
				System.out.println(str);
				return; // 退出程序
			}
		}
	}
}

二:统计字符串中不同类型字符的个数

/*
 * 统计字符串不同字符类型的个数
 */
public class Dome08 {
	public static void main(String[] args) {
		String str = "天气,tianqi/,//t232aA{{";
		System.out.printf("字符串长度:%d\n", str.length());
		// 英语,中文,数字,其他
		StringBuilder[] sb = new StringBuilder[4];
		for (int i = 0; i < sb.length; i++) {
			// StringBuilder初始化
			sb[i] = new StringBuilder();
		}
		for (int i = 0; i < str.length(); i++) {
			// 包含所有英文字母
			if (str.charAt(i) >= 'A' && str.charAt(i) <= 'z') {
				sb[0].append(str.charAt(i));
				// 判断所有中文
			} else if (str.charAt(i) >= 19968 && str.charAt(i) <= 171941) {
				sb[1].append(str.charAt(i));
				// 数字
			} else if (str.charAt(i) >= '1' && str.charAt(i) <= '9') {
				sb[2].append(str.charAt(i));
			} else {
				sb[3].append(str.charAt(i));
			}
		}
		for (int i = 0; i < sb.length; i++) {
			System.out.printf("%d\t%s\n", sb[i].length(), sb[i].toString());
		}
	}
}

三:实现一个函数,把字符串中的每个空格替换成“%20”

例如输入“I am Tom”,则输出“I%20am%20Tom”

public class Dome06 {

	public void replaceBlank(char string[], int length) {
		if (string == null || length <= 0)
			return;

		int originalLength = 0;
		int numberOfBlank = 0;
		int i = 0;

		System.out.println(string);

		while (string[i] != '\0') {
			++originalLength;

			if (string[i] == ' ')
				++numberOfBlank;

			++i;
		}

		int newLength = originalLength + numberOfBlank * 2;
		if (newLength > length)
			return;

		int indexOfOriginal = originalLength;
		int indexOfNew = newLength;

		while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
			if (string[indexOfOriginal] == ' ') {
				string[indexOfNew--] = '0';
				string[indexOfNew--] = '2';
				string[indexOfNew--] = '%';
			} else {
				string[indexOfNew--] = string[indexOfOriginal];
			}
			--indexOfOriginal;
		}

		System.out.println(string);
	}

	public static void main(String[] args) {
		char[] originalStr = new char[30];
		originalStr[0] = 'I';
		originalStr[1] = ' ';
		originalStr[2] = 'a';
		originalStr[3] = 'm';
		originalStr[4] = ' ';
		originalStr[5] = 'T';
		originalStr[6] = 'o';
		originalStr[7] = 'm';
		originalStr[8] = '.';
		new Dome06().replaceBlank(originalStr, 30);
	}

}
时间: 2024-10-11 22:43:40

Java算法解析3—————对字符串相关算法的相关文章

字符串相关算法合集

...日后会慢慢补(flag!)先来讲讲基本的 一.字符串Hash 将字符串用一个数表示,常用的写法有: 1.自然溢出 2.单Hash 3.双Hash 前两个会被精心构造的串卡掉,最后一个虽然目前卡不掉,但是出题人可以卡你常数. 所以这个算法很Naive?不是的 我们来看一道题 bzoj1014 用splay维护字符串的最长公共前缀,那么问题来了,没有一种OI比赛中常用的数据结构能维护一个动态的字符串 这时字符串哈希就派上了用场 我们用一个哈希值来表示字符串 在splay上跑一个二分查找就好了

Java遍历解析URL类型字符串中参数

public static void main(String[] args) { String str="&emailCheckURL=447&[email protected]&porm=p"; String[] splitURL=str.split("&"); Map<String,Object> mapParam=new HashMap<String,Object>(); for(String s:spl

字符串kmp算法详解

之前要研究aho-corasick算法 拖了好久  感觉自己博客要开始了!! aho-corasick算法依赖2元素: 1.Trie树解析,1个月前就已经写过博客分析过了. 2.KMP算法 此文重点介绍字符串KMP算法: 一开始说说普通模式算法("BF"算法)思路:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为"指针回溯"),同时模式串向后移动一个字符的位置.一次次的循环,直到匹配成功或者程

[java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)

内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次minor gc:然后再进行判断伊甸园中的内存是否足够:如果不足 则去看存活区的内存是否足够:如果内存足够,把伊甸园部分活跃对象保存在存活区,然后把对象保存在伊甸园:如果内存不足,向老年代发送请求,查询老年代的内存是否足够:如果老年代内存足够,将部分存活区的活跃对象存入老年代.然后把伊甸园的活跃对象放

Java虚拟机对象存活标记及垃圾收集算法解析

一.对象存活标记 1. 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器就减1:任何时刻计数器都为0的对象就是不可能再被使用的. 引用计数算法(Reference Counting)的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软的COM(Component Object Model)技术.使用ActionScript 3的FlashPlayer.Python语言以及在游戏脚本领域中被广泛应用

区块链~Merkle Tree(默克尔树)算法解析~转载

转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是很深入,如果有不对的地方,希望各位大神指正*/ Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节点是

[转]SURF算法解析

SURF算法解析 一.积分图像    积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示: 那么,当我们想要计算图片一个区域的积分,就只需计算这个区域的四个顶点在积分图像里的值,便可以通过2步加法和2步减法计算得出,其数学公式如下: 二.Hession矩阵探测器1.斑点检测    斑点:与周围有着颜色和灰度差别的区域.    在一个一维信号中,让它和高斯二阶导数进行卷积,也就是拉普拉斯

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(转)

第 2 部分: 深入推荐引擎相关算法 - 协同过滤 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法. 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”.本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现.Apache Mahout 是 ASF 的一个

JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用递归的2种不同解法. 1.典型递归元素交换的算法 (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时. (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素. package test; import java.uti