Java String方法与IO流精华总结

0 下载量 160 浏览量 更新于2024-09-01 收藏 66KB PDF 举报
"这篇文章除了介绍String的基础方法,如获取长度、查找示定字符或字符串的索引,还包括判断方法,如判断字符串是否以特定字符串结尾、是否为空,以及转换方法,如从字符数组创建字符串。此外,文章还涉及到IO流,虽然未提供具体细节,但暗示了字符串在输入输出中的应用。" 在Java编程中,`String`类是处理文本数据的重要工具。以下是对`String`类中提及的一些关键方法的详细解释: 1. **基础方法** - `int length()`:返回字符串的长度,即字符个数,不包括结束的空字符`\0`。 - `char charAt(int index)`:返回指定索引位置的字符。索引从0开始,如果索引超出范围,会抛出`StringIndexOutOfBoundsException`。 - `int indexOf(char ch)`:返回指定字符在字符串中首次出现的索引,若不存在则返回-1。 - `int indexOf(String str)`:返回指定子字符串在字符串中首次出现的索引,若不存在则返回-1。 - `int indexOf(char ch, int fromIndex)` 和 `int indexOf(String str, int fromIndex)`:从指定的fromIndex位置开始查找字符或子字符串。 2. **判断方法** - `boolean endsWith(String str)`:检查当前字符串是否以指定字符串结尾。 - `boolean isEmpty()`:如果字符串长度为0,则返回`true`,表示字符串为空。 - `boolean equals(Object obj)`:比较两个字符串是否相等,如果对象是另一个字符串且内容相同,则返回`true`。 - `boolean equalsIgnoreCase(String str)`:不考虑大小写比较字符串是否相等。 - `boolean contains(String str)`:检查当前字符串是否包含指定的子字符串。 3. **转换方法** - `String(char[] arr)`:根据给定的字符数组创建一个新的字符串,数组的所有字符都将被包含。 - `String(char[] arr, int offset, int length)`:从字符数组的指定偏移量(offset)开始,取length长度的字符创建字符串。 这些方法在处理字符串时非常实用,比如在搜索特定子串、验证字符串格式、合并或分割字符串时。而在IO流方面,字符串常用于读取文件内容(如`BufferedReader.readLine()`返回字符串),或者将数据写入文件(如`PrintWriter.println(String str)`)。了解并熟练掌握这些方法对于编写高效、可靠的Java代码至关重要。
2012-11-07 上传
public static String loadAFileToStringDE1(File f) throws IOException { long beginTime = System.currentTimeMillis(); InputStream is = null; String ret = null; try { is = new BufferedInputStream( new FileInputStream(f) ); long contentLength = f.length(); ByteArrayOutputStream outstream = new ByteArrayOutputStream( contentLength > 0 ? (int) contentLength : 1024); byte[] buffer = new byte[4096]; int len; while ((len = is.read(buffer)) > 0) { outstream.write(buffer, 0, len); } outstream.close(); ret = outstream.toString(); //byte[] ba = outstream.toByteArray(); //ret = new String(ba); } finally { if(is!=null) {try{is.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法1用时"+ (endTime-beginTime) + "ms"); return ret; } public static String loadAFileToStringDE2(File f) throws IOException { long beginTime = System.currentTimeMillis(); InputStream is = null; String ret = null; try { is = new FileInputStream(f) ; long contentLength = f.length(); byte[] ba = new byte[(int)contentLength]; is.read(ba); ret = new String(ba); } finally { if(is!=null) {try{is.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法2用时"+ (endTime-beginTime) + "ms"); return ret; } public static String loadAFileToStringDE3(File f) throws IOException { long beginTime = System.currentTimeMillis(); BufferedReader br = null; String ret = null; try { br = new BufferedReader(new FileReader(f)); String line = null; StringBuffer sb = new StringBuffer((int)f.length()); while( (line = br.readLine() ) != null ) { sb.append(line).append(LINE_BREAK); } ret = sb.toString(); } finally { if(br!=null) {try{br.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法3用时"+ (endTime-beginTime) + "ms"); return ret; } 3个方法去读取一个大于50M的文件,当不设置jvm参数时都OutofMemery,当设置-Xmx128M时。只有方法3 可以通过,设置到-Xmx256M时也只有方法3可以通过,干脆设置512M,都可以了,运行时间如果正常的话一般都在4~5S