トップページ -> プログラミング -> Java プログラミング入門 -> 文字列処理(文字列の比較,大文字小文字を区別しない比較,トークンの切り出し)
[サイトマップへ], [サイト内検索へ]

文字列処理(文字列の比較,大文字小文字を区別しない比較,トークンの切り出し)

String (固定長の文字列),StringBuffer (可変長の文字列) を使うJava プログラム


1行単位で読み込み(BufferReader クラスの readLine メソッドを使用)

参考Webページ: http://www.atmarkit.co.jp/fjava/rensai2/jspservlet07/jspsevlet07_1.html


StringBufferに入力したデータを溜め込み出力するプログラム

input "データ"と打ち込むことでデータをStringBufferに入力し、outputと打 ちこむことでこれまでに入れた全データを画面に出力する。deleteと打ち込むと 入力したデータを全て削除する。helpと打ち込むとコマンドリストが画面に出力 され、quitと打ち込むと終了する。

プロジェクトを作成

以下の3つのjavaファイルを作成(パッケージ名はhoge.hoge.comとつける)

javaファイル名: HelloWorld.java, command_line.java, test.java test.javaをクリックし, 実行→実行→JUnitテスト(もしくは Alt+Shift+X を 押した後 T を押す)

HelloWorld.java

package hoge.hoge.com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HelloWorld {
    public static void main(String[] args) {
        try{
            String text;
            StringBuffer sb = new StringBuffer();
            BufferedReader buf =
                new BufferedReader(new InputStreamReader(System.in));
            System.out.println("入力してください:(ヘルプ:help) ");
            command_line cl = new command_line();
            while(true){
                System.out.print("> ");
                text=buf.readLine();
                if(cl.return_value(text,sb)==0)break;
            }
        }    
        catch(IOException e) {
            System.out.println("IO Error");
            System.exit(1);
        }
    }
}

command_line.java

package hoge.hoge.com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class command_line {
    public int return_value(String text, StringBuffer sb){

            String command, value;
            StringTokenizer st;

            if(text.equals(""))return -1;
            st = new StringTokenizer(text, " ");
            command = st.nextToken();
            if(command.compareTo("quit")==0)return 0;
            else if(command.compareTo("help")==0){
                System.out.println("コマンド一覧 ");
                System.out.println(" ヘルプ     :help");
                System.out.println(" 終了      :quit");
                System.out.println(" データ入力   :input \"データ\" ");
                System.out.println(" 全データ出力 :output");
                System.out.println(" 全データ削除 :delete");
                return 1;
            }
            else if(command.compareTo("input")==0){
                if(st.hasMoreTokens()==true){
                    value = st.nextToken();
                    sb.append(value+'\n');
                }
                return 2;
            }
            else if(command.compareTo("output")==0){
                System.out.print(sb);return 3;}
            else if(command.compareTo("delete")==0){
                sb.delete(0, sb.length());return 4;}

        return -1;
    }
}

test.java (単体テスト用)

package hoge.hoge.com;

import junit.framework.TestCase;

public class test extends TestCase {
    public void test_no_input() {
        StringBuffer sb = new StringBuffer();
        command_line cl = new command_line();
        assertTrue(cl.return_value("",sb)==-1);
    }
    public void test_quit() {
        StringBuffer sb = new StringBuffer();
        command_line cl = new command_line();
        assertTrue(cl.return_value("quit",sb)==0);
    }
    public void test_help() {
        StringBuffer sb = new StringBuffer();
        command_line cl = new command_line();
        assertTrue(cl.return_value("help",sb)==1);
    }
    public void test_inout() {
        StringBuffer sb = new StringBuffer();
        command_line cl = new command_line();
        assertTrue(cl.return_value("input asdf",sb)==2);
        assertTrue(cl.return_value("output",sb)==3);
        assertTrue(sb.toString().equalsIgnoreCase("asdf\n"));
    }
    public void test_delete() {
        StringBuffer sb = new StringBuffer();
        command_line cl = new command_line();
        assertTrue(cl.return_value("delete",sb)==4);
    }
}

文字列比較プログラム

プログラムの内容

2つの文字列を入力して、文字列比較を行う。 同じであればtrue、違っていればfalseを返す。

package hoge.hoge.com;

import java.io.*;

public class stringtest {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br =
              new BufferedReader(new InputStreamReader(System.in));

        System.out.println("文字列A");
        String strA = br.readLine();
        System.out.println("文字列B");
        String strB = br.readLine();
        if (strA.equals(strB)) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}

期待される結果

文字列A
ABC
文字列B
ABC
true

キーボードからの入力を読み取り、出力する。

コンソール画面においてキーボードからの入力を読み取り、 StringBufferに蓄える。最終的に入力した結果を出力する。

ファイル:TestProj3.java, TestProj3Test.java

TestProj3.java

JUnitによるテスト

TestProj3Test.java

TestProj3.java

package hoge.hoge.com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestProj3 {
    public static String get_string() throws IOException {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in), 1);
        System.out.println("input string:");
        System.out.print(">");
        System.out.flush();
        String s = r.readLine();
        return s;
    }
    
    public static StringBuffer set_buffer() throws IOException {
        // TODO Auto-generated method stub
        StringBuffer buf = new StringBuffer();
        String str;
        System.out.println("roop (finish is \"\").");
        while(true){
            str = get_string();
            if(str.equalsIgnoreCase("")) break;
            //else buf.append("\t").append(str).append("\n");
            else{
                System.out.println("you input \"" + str + "\".");
                buf.append("\t" + str + "\n");
            }
        }
        System.out.println("finish input.");
        return buf;
    }
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        StringBuffer buf = set_buffer();
        if(buf.length() != 0){
            System.out.println("record:");
            System.out.print(buf);
        }
        else System.out.println("record:no string was input.");
        
        return;
    }
}

TestProj3Test.java

package hoge.hoge.com;

import java.io.IOException;

import junit.framework.TestCase;

public class TestProj3Test extends TestCase {

    public void testString() throws IOException {
        System.out.println("check get_string() :: input \"abc\".");
        String str = TestProj3.get_string();
        assertNotNull(str);
        assertEquals(str, "abc");
        System.out.println("");
    };
    
    public void testStingBuffer() throws IOException {
        System.out.println("check set_buffer() :: input \"abc\" and \"def\".");
        StringBuffer str = TestProj3.set_buffer();
        assertNotNull(str);
        assertEquals(str.toString(), "\t" + "abc" + "\n" + "\t" + "def" + "\n");
        System.out.println("");
    };
}

本サイトのサイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]