文字列の処理: JVM COBOL

JVM COBOL では、あらかじめ定義された Java 文字列型、および文字列を処理するための強力な技術が提供されます。

JVM COBOL では、次の操作を実行できます。

文字列の事前定義型

JVM COBOL には、Java コード文字列型に相当する事前定義の文字列型があります。この型名は、データ項目を宣言する場合、およびクラス名が予測されるどの場所でも使用します。次に例を示します。

01 obj-string string.

文字列オブジェクトの構築

文字列オブジェクトは、通常、New メソッドを使用して構築されません。値を単純に文字列参照に割り当てることができ、コンパイラは構築を自動で行います。文字列の値は、リテラル値、または英数字、各国文字のデータ項目やグループ データ項目のいずれかにこの方法で設定できます。次に例を示します。

       set obj-string to "   Some text..."
        display obj-string

サブストリング

サブストリングは、(offset:stringLength) の構文で JVM COBOL に構築されます。たとえば、次の行は、文字列 a の 6 番目の文字で始まる 2 文字を表示します。

display a(6:2)    

これはかなり簡単な例で、a は pic x ではない文字列になります。C# または Java でこれを行うには、サブストリング メソッドを使用する必要がありますが、JVM COBOL では、構文内になります。

連結

連結は & (アンパサンド) を使用して簡単に実行できます。

文字列の連結および文字列の部分参照を同じ行で行うことができます。それだけではなく、COBOL の引用符付き定数と文字列オブジェクトがシームレスに連結されます。次に例を示します。

       set a to a(1:5) & "-" & a(7:)
       display a

文字列と次の内容を & (アンパサンド) で連結できます。

文字列変数 a & b
サブストリング a & b(1:3)
引用符付き文字列定数 a & "-"
非文字列型 23 & " is a number"
呼び出しからの戻り値 a & type COBOLString::Split(b,13,7)

次の例では、サブストリングと連結を組み合わせます。ここでは、COBOL 引用符付き定数は、文字列に自動でキャストされ、呼び出しから戻される値は、2 つの COBOL 引用符付き定数と連結されます。

       set a to "Micro Focus JVM COBOL is "                  & *>Micro Focus JVM COBOL is 
           type COBOLString::Split("The cake is amazing", 13, 7) & *>amazing
           "ly good for working with strings!"                     *>ly good for working with strings!
       display a

COBOLString::Split() メソッドに次の内容が含まれる場合:

       set stringOut to stringIn(offset:stringLength)

文字列の長さの取得

文字列の長さを取得するには、SIZE OF を使用します。次に例を示します。

       set n to size of myString

数字と文字列の連結

次の例では、文字列変数 (COBOL 引用符付き定数、自動で文字列にキャストされる) と、呼び出しから戻される数字を連結します。この数字は、その後、別の COBOL 引用符付き定数と連結されます。

           display a                           & 
              " (this string is "              & *> (this string is
               type COBOLString::CharCount(a)  & *>69
              " bytes long)"                     *> bytes long) 

文字列の比較

文字列を比較するには、= および <> を使用します。次に例を示します。

           if a = b
               display "a = b"
            end-if
            if a <> b           
               display "a <> b"
            end-if  

文字列の比較は演算子 = および <> に対するオーバーロードとして実装されます。これらの演算子は、比較オブジェクト参照ではなく文字ごとに比較します。