自己实现Java_String里面的spilt方法,不能借助于string的任何的方法,类
2016-12-26 22:45
381 查看
class StrMethod{ char[] data; // 默认构造方法,分配4k的长度 public StrMethod() { data = new char[1024*4]; } public StrMethod(char[] arrData) { data = new char[arrData.length]; for (int i = 0; i < arrData.length; i++) { data[i] = arrData[i]; } } // 拷贝构造函数 public StrMethod(StrMethod strOri) { data = Arrays.copyOf(strOri.data, strOri.data.length); } public int getLen(){ return data.length; } //数组比较 private boolean arrCompare(char[] a,char[] b){ if(a.length!= b.length){ return false; } for (int i = 0; i < b.length; i++) { if (a[i]!=b[i]) { return false; } } return true; } //统计字符串出现的次数 public int Count(StrMethod toFind){ int count = 0; int toFindLen = toFind.data.length;//要找的字符串长度 //要找的字符串比本字符串场,直接退出 if(data.length<toFindLen){ return 0; } for (int i = 0; i < data.length; i++) { //剩下的字符数组以及比需要找的串短,直接跳出循环 if(i+toFindLen > data.length){ break; } //新建一个字符数组 char[] a = new char[toFindLen]; //从第i个位置拷贝一定长度到临时字符数组 System.arraycopy(data, i, a, 0, toFindLen); //如果新的数组a跟要查找的字符串的内容和长度相等就统计一下 if (arrCompare(a,toFind.data)) { count++; } } return count; } /*在正则表达式之前出现的内容为一个段拷贝 * 比如有一组原始数组arrStr:[123,abc,45] * 他的下标依次为: 0123456789 * ','所在的位置: 3 7 * 原始数组被拆分成了两段形成了三组数组,下标依次为0、1、2 * * 当截取第一段数组123,i的起始位置为0,','的位置为0 * 二 abc 4 7 * 三 45 8 9 * 当遍历到最后一段数组时,拷贝的数组长度为i-start+1 = 9-8+1=2 */ public StrMethod[] spilte(StrMethod regex){ int nSpilteNum = 0; nSpilteNum = Count(regex);//统计分隔符数量 StrMethod[] retStr;//返回的数组结果 //如果包含分隔符 //如果分隔符数量大于0,就给结果数组定义一个有分隔符数量大小的长度 if (nSpilteNum > 0) { retStr = new StrMethod[nSpilteNum]; } //如果不包含分隔符.就返回整个字符串 else{ retStr = new StrMethod[1];//开辟一个新的字符长度 retStr[0] = new StrMethod(data);//把原数组的内容赋值给结果数组 return retStr; } int index = 0;//返回数组的索引 int start = 0;//正则表达式的起始位置 for (int i = 0; i < data.length; i++) { //处理最后一个字符 if (i == data.length - 1) { char[] tmp = new char[i - start + 1];//定义一个临时数组 System.arraycopy(data, start, tmp, 0, i - start + 1); retStr[index] = new StrMethod(tmp); } //截取字符串并拷贝到新的数组里 if (data[i] == regex.data[0]) { char[] tmp = new char[i-start]; System.arraycopy(data, start, tmp, 0, i+start); retStr[index] = new StrMethod(tmp); start = i+1;//,找到了正则表达式,正则表达式的位置往后移一位 index++;//原始数组继续向后查找 } } return retStr; } }
相关文章推荐
- [C#]简单重写IComparer接口,实现自己的String.CompareTo 方法,自定义比较规则。
- java里面InputStream类型转换成String类型怎么实现?
- C#中如何实现JAVA中的String.replaceAll()方法功能
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
- java实现String的split方法
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
- Aplix VM安装Java应用在main menu上不能显示自己的图标,而是显示一朵小花的解决方法
- java的strim()方法的实现,ltrim(String str,String substr)和rtrim(String str,String substr)
- java中,父类是抽象类不能通过工厂输出时,如何通过其他类实现输出的示例代码(工厂方法种类(1))
- 实现java String的equals方法
- js里没有equals方法,java里string判断相等不能用==
- 自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
- js里没有equals方法,java里string判断相等不能用==
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
- java properties 的六种读取方法 以及一种自己最方便的实现
- C#中如何实现JAVA中的String.replaceAll()方法功能
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- java string 转date方法如何实现
- 关于Java调用C写的动态链接库的具体实现方法,自己捉摸了好久,现在算是来造福大众了 T _T
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化