Java 文字列の詳細

巴扎黑
リリース: 2017-06-26 11:29:46
オリジナル
1263 人が閲覧しました

Java String Advanced

はじめに

文字列操作には、String、StringBuilder、および StringBuffer という 3 つの最も一般的に使用されるクラスがあります。これらの 3 つのクラスについては、以下で詳しく説明します...

String

String クラス。これは文字列の最も基本的なクラスです。ここでは詳しくは説明しません。 /code>

新しい文字列(StringBuilder str)

    新しい文字列(StringBuffer str)
  • new String(String str)

  • new String(StringBuilder str)

  • new String(StringBuffer str)

  • new String(byte[] bys,String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。

常用方法

  • str charAt(int index) 返回指定索引处的字符

  • String concat(String str) 将指定字符串str连接到此字符串的结尾,返回连接成功后的字符,因此需要接受才能有效果

  • boolean contains(CharSequence s) 判断此字符串是否包含指定的char值序列,这里的 CharSequence是一个接口,可以直接使用它的子类作为参数(String,StringBuffer,StringBuild)

  • static String copyValueOf(char[] c) 将字符数组变成字符串并且返回

  • static String copyValueOf(char[] c,int off,int count) 将截取的字符数组变成字符串并且返回,off是开始截取的下标,count是截取的个数

  • boolean endWith(String s) 判断字符串是否是以s结尾

  • boolean equals(Object o) 用于比较

  • int indexOf(char c) 返回字符c在字符串中第一次出现的索引

  • int indexOf(char c,int fromIndex) 从指定索引处开始搜索,查找第一次出现的索引

  • int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。

  • int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

  • boolean isEmpty()

  • int length()

  • boolean matches(String regex) 是否匹配正则表达式

  • trim() 返回字符串的副本,忽略前导空白和尾部空白。

  • String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。

  • String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。

  • String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

  • String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。

  • String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。

  • char[] toCharArray() 将此字符串转换为一个新的字符数组。

  • byte[] getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组

注意

  • 上面的new String(byte[] bys,String charsetName)这个构造方法很重要,它可以改变字符串的编码集(和byte[] getBytes(Charset charset))配合着使用,下面我们来看一个例子,代码如下:

/*         * InputStreamReader实现了将字节流FileInputStream转换为字符流,然后使用转换来的字节流创建高效流,从而实现高效的读写         *//*         * 编码集(我的eclipse编辑器默认的是utf-8         * 下面将中文字符串的编码集变为GBK写入a.txt文件,因为a.txt默认的是utf-8的因此这里在文件中显示的是乱码         * 然后我们读出来的还是GBK的,因为我们写入的是GBK编码集的,但是我的eclipse是utf-8的编码集,因此在控制台上输出的还是乱码         * new String(byte[] bys,String         * charsetName)使用这个构造方法将byte数组改变编码集并且转换为utf-8格式的,那么这次在控制台上输出的就不乱码了         */// 将GBK格式的中文写入a.txt文件File file = new File("src/a.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        String str = "中";byte[] by = str.getBytes("GBK"); // 将字符串改为GBK编码集fileOutputStream.write(by);
        fileOutputStream.close();        //从a.txt文件中读取中文FileInputStream fileInputStream = new FileInputStream(file);int len;byte[] bys = new byte[4];while ((len = fileInputStream.read(bys)) != -1) {
            System.out.println(new String(bys, "GBK"));
        }
        fileInputStream.close();
ログイン後にコピー

StringBuffer

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。当然最重要的一点就是线程安全,我们可以从它的源码中可以看出,对于一些操作(append,insert new String(byte[] bys,String charsetName) 指定された文字セットを使用して指定されたバイト部分配列をデコードすることにより、新しい String を構築します。

共通メソッド
🎜🎜🎜🎜str charAt(intindex)指定されたインデックスの文字を返します🎜🎜🎜String concat ( String str) 指定された文字列 str をこの文字列の末尾に接続し、接続が成功した後に文字を返します。そのため、有効にするには受け入れられる必要があります🎜🎜🎜boolean contains (CharSequence s) この文字列に指定された char 値のシーケンスが含まれているかどうかを判断します。ここでの CharSequence は、そのサブクラスをパラメータ (String、StringBuffer、StringBuild) として直接使用できます🎜🎜🎜 static String copyValueOf(char[] c) は文字配列を文字列に変換して返します 🎜🎜🎜static String copyValueOf(char[] c,int off,int count)</code > will インターセプトされた文字配列が文字列に変換されて返されます。 off はインターセプトを開始する添字、count はインターセプトの数です🎜</li>🎜🎜<code>boolean endWith(String s) を決定します。文字列が s で終わるかどうか🎜🎜🎜booleanquals(Object o) が比較に使用されます🎜🎜🎜intindexOf(char c)</code > 文字列内の最初に出現するインデックスの文字 c を返します🎜</li>🎜🎜<code>int indexOf(char c,int fromIndex) 指定されたインデックスから検索を開始して、最初の出現🎜🎜🎜int indexOf(String str) この文字列内で指定された部分文字列が最初に出現するインデックスを返します。 🎜🎜🎜int indexOf(String str,int fromIndex) 指定されたインデックスから開始して、この文字列内で指定された部分文字列が最初に出現するインデックスを返します。 🎜🎜🎜boolean isEmpty()
🎜🎜🎜int length()🎜🎜🎜 booleanmatches(String regex) 正規表現に一致するかどうか 🎜🎜🎜trim() 先頭と末尾の空白を無視して、文字列のコピーを返します。 🎜🎜🎜String substring(int beginIndex) この文字列の部分文字列である新しい文字列を返します。 🎜🎜🎜String substring(int beginIndex, int endIndex) この文字列の部分文字列である新しい文字列を返します。 🎜🎜🎜String toUpperCase() デフォルトのロケールの規則を使用して、この String 内のすべての文字を大文字に変換します。 🎜🎜🎜String[] Split(String regex) 指定された正規表現の一致に基づいてこの文字列を分割します。 🎜🎜🎜String[] Split(String regex, int limit) 指定された正規表現との一致に基づいてこの文字列を分割します。 🎜🎜🎜char[] toCharArray() この文字列を新しい文字配列に変換します。 🎜🎜🎜byte[] getBytes(Charset charset) 指定された charset を使用して、この Stringbyte にエンコードします。 code> シーケンスを作成し、結果を新しいバイト配列に保存します🎜</li></ul>🎜🎜注🎜🎜🎜🎜🎜上記の新しい String(byte[] bys,String charsetName) 構築メソッドは非常に重要です。文字列のエンコーディング セットを変更します (byte[] getBytes(Charset charset) と組み合わせて使用​​します)。コードは次のとおりです。 🎜</li></ul>🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="sourceCode java"> public synchronized StringBuffer append(Object obj) {super.append(String.valueOf(obj));return this; }public synchronized StringBuffer append(String str) {super.append(str);return this; } public synchronized StringBuffer delete(int start, int end) {super.delete(start, end);return this; }/** * @throws StringIndexOutOfBoundsException {@inheritDoc} * @since 1.2 */public synchronized StringBuffer deleteCharAt(int index) {super.deleteCharAt(index);return this; }</pre><div class="contentsignin">ログイン後にコピー</div></div>🎜🎜 StringBuffer🎜 🎜🎜スレッドセーフな変更可能な文字シーケンス。 <code>String に似た文字列バッファですが、変更できません。もちろん、最も重要な点はスレッドの安全性です。ソース コードから、一部の操作 (appendinsert..) ブロックでスレッド制御が使用されていることを確認できます。同期、マルチスレッドでの使用に適しており、ソースコードは次のとおりです: 🎜🎜🎜rrreee🎜

構築

  • new StringBuffer(StringBuilder str)new StringBuffer(StringBuilder str)

  • new StringBuffer(String str)

常用的方法

  • StringBuffer append(str)将指定类型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)

  • StringBuffer insert(int offest,  str) 将指定类型的str插入到此序列中,offest表示开始插入的位置的索引,类型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilder

  • String delete(int fromIndex,int endIndex) 移除此序列中的字符串并且返回新的缓冲字符串

  • StringBuffer reverse() 反转字符串

  • String substring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。

  • String substring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。

  • StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。

  • int length() 长度

  • String toString() 返回此序列中数据的字符串表示形式。

StringBuilder

建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。但是这个类不是线程安全的,只适合单线程,如果使用多线程推荐使用StringBuffer,当然使用这个也行,不过需要自己实现同步

构造方法

  • new StringBuilder(String str)

常用方法

这个类的常用方法和StringBuffer

new StringBuffer(String str)🎜🎜 🎜よく使用されるメソッド🎜🎜🎜🎜🎜StringBuffer append(str)指定された型の str をこの文字列の末尾に追加します (String, char, char[], int, double, float ,long,StringBuffer,StringBuilder)🎜🎜🎜StringBuffer insert(int offest, str) 指定された型の str をこのシーケンスに挿入します。オフセットは開始位置を示します挿入のインデックス タイプは String、char、char[]、int、double、float、long、StringBuffer、StringBuilder です🎜🎜🎜String delete(int fromIndex,int endIndex) これを削除しますシーケンス内の文字列を返し、新しいバッファ文字列を返します🎜🎜🎜StringBuffer reverse() 文字列を反転します🎜🎜🎜String substring(int start) code> この文字シーケンスに現在含まれている文字サブシーケンスを含む新しい String を返します。 🎜🎜🎜<code>String substring(int start, int end) このシーケンスに現在含まれている文字サブシーケンスを含む新しい String を返します。 🎜🎜🎜StringBuffer deleteCharAt(int index) このシーケンス内の指定された位置にある文字を削除します。 🎜🎜🎜int length() 長さ 🎜🎜🎜String toString() このシーケンス内のデータの文字列表現を返します。 🎜🎜

StringBuilder

🎜🎜 ほとんどの実装では StringBuffer よりも高速であるため、このクラスを優先して使用することをお勧めします。ただし、このクラスはスレッドセーフではなく、単一スレッドにのみ適しています。マルチスレッドを使用する場合は、StringBuffer を使用することをお勧めします。もちろん、これを使用することもできます。自分で同期を実装するには🎜🎜🎜🎜🎜🎜🎜new StringBuilder(String str)🎜🎜🎜共通メソッド🎜🎜🎜このクラスの共通メソッドは以下と同じですStringBuffer のものなので、ここでは同じではありません。すべてリストされていますので、上記を参照して使用できます🎜🎜

以上がJava 文字列の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート