[code]二分法:从已排好序的String数组中查询要搜索的字符串的下标
2010-05-07 15:00
471 查看
package utils.find; import java.lang.reflect.Array; /** * ArrayUtil <br/> * Generated on: 2010.05.07 * * @author loocao */ public class ArrayUtil { /** * @param args */ public static void main(String[] args) { String[] arrString = new String[] { "abc0", "cde1", "efg2", "hij3", "lmn4", "opq5", "rst6", "uvw7", "xyz8" }; String findStr = "rst6"; System.out.println(indexOfStringArray(arrString, findStr)); } /** * 从已排好序的String数组中查询要搜索的字符串的下标 * * @param args * 已经排序的字符串数组 * @param findStr * 要查找的字符串 * @return 字符串所在<b>下标<b> */ public static int indexOfStringArray(String[] args, String findStr) { if (findStr == null || args == null || args.length == 0) return -1; int index = args.length % 2 == 0 ? args.length / 2 : (args.length - 1) / 2; if (args[index].equals(findStr)) { return index; } else { int temp, result = 0, start = 0, length = 0; if (findStr.compareTo(args[index]) < 0) { start = 0; length = index;// index之前的数组长度 temp = indexOfStringArray(subArray(args, start, length), findStr); result = temp; } else if (findStr.compareTo(args[index]) > 0) { start = index + 1; length = args.length - start;// index之后的数组length temp = indexOfStringArray(subArray(args, start, length), findStr); if (temp == -1) result = temp; else result = temp + index + 1; } return result; } } /** * 截取数组 * * 感谢enihs( http://hi.csdn.net/shine333 )指点, * System.arraycopy: http://doc.java.sun.com/DocWeb/api/java.lang.System?lang=zh_cn&mode=Read#T3 * * @param c * args数组中元素的类型class * @param args * 要截取的数组 * @param start * 开始下标 * @param length * 要复制的数组长度 * @return args 中下标从 start 到 start+length-1 的数组 */ @SuppressWarnings("unchecked") public static <T> T[] subArray(T[] args, int start, int length) { T[] temp = (T[]) Array.newInstance(args.getClass().getComponentType(), length); // for (int i = start; i <= start + length - 1; i++) { // temp[i - start] = args[i]; // } // 将数组args从start到length-1复制到temp中,由enihs指点 System.arraycopy(args, start, temp, 0, length); return temp; } }
相关文章推荐
- 当字符串数组String[]为空时,通过下标访问时会越界,空指针异常
- String字符串与字符(char类型)数组互相转换
- 2015.12.23 OC中的字符串(NSString&NSMutableString) 数组(NSArray&NSMutableArray)
- 将字符串切割成数组 componentsSeparatedByString
- 字符串string和内存流MemoryStream及比特数组byte[]互转比转换
- Android中资源文件中的字符串数组string-array简单用法
- javaScript array(数组)使用字符串作为数组下标的方法
- 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
- 用string.Join与List<T>或者与string数组转换为字符串
- 字符串数组(String []) 去掉重复值的方法
- C/C++关于字符串string、char*字符串数组与其他类型转换
- 字符串相互转字符数组 string byte 数组 array of byte
- 字符串数组内搜索的方法
- SAP ABAP编程 在string类型A字符串中查询匹配string类型B字符串
- string 关键字 字符串 分割 组成 list 数组
- C# List<object> 转换为List<string>、转换为 string数组、转换为一个字符串用分隔符 隔开
- java String字符串转成json数组并且遍历
- CCDataVisitor(数据访问器 子类:CCPrettyPrinter _indentLevel-用于数组; string _indentStr; _result-指针字符串)
- Java基础-数组——String字符串
- Comparator<String>接口,String类数组按字符串长度排序