Java 文字検索、文字列検索など

WindowsのMsys2のbash環境で、「cygheap base mismatch detected」というエラーが起きて、ハマりにハマって解決できず、年末から3日がぐらいを無駄に過ごしてしまったボクです(涙)。

Javaアルゴリズムを勉強したいと思うこと、あるあるだよね~、え?無いですか?

というわけで、今回は、Javaの勉強で、レッツ~トライ。

 

Javaで文字列検索

まぁ、StringのArrayListの文字列の仕分けですかね~ 

tech.pjin.jp

⇧  上記サイト様を参考にさせていただきました。 

package test;

import java.util.ArrayList;
import java.util.Collections;

public class TestJava {

  public static void main(String[] args) {
    // 有効・無効が混在した文字列
    ArrayList<String> identifierList = new ArrayList<>();
    Collections.addAll(identifierList, "for", "Class", "i", "num", "public", "a");

    // 無効な文字列(除外対象:ブラックリスト)
    ArrayList<String> excludeList = new ArrayList<>();
    Collections.addAll(excludeList, "class", "for", "if", "public", "static", "while");

    ArrayList<String> valid = new ArrayList<>();   // 有効
    ArrayList<String> invalid = new ArrayList<>(); // 無効

    for(String word : identifierList) {
      boolean isValid = true;
      // 無効な文字列の検索
      for(String ex : excludeList) {
        // 無効な文字列が見つかった場合
        if(word.equals(ex)) {
          invalid.add(word);
          isValid = false;
          break;
        }
      }
      // 有効な文字列が見つからなかった場合(無効な文字列が見つからなかった場合)
      if(isValid) {
        valid.add(word);
      }
    }

    System.out.println("有効 : " + valid);
    System.out.println("無効 : " + invalid);
  }
}

f:id:ts0818:20190103093919p:plain

 

Javaで文字検索

package test;

import java.util.Arrays;

public class TestJavaChar {

  public static void main(String[] args) {
    // 文字の配列
    char chars[] = { 'p', 'e', 'n', 'p', 'i', 'n', 'e', 'a', 'p', 'p', 'l', 'e', 'a', 'p', 'p', 'l', 'e', 'p', 'e',
        'n' };

    char key = 'p'; // 検索文字
    int[] indexArray = new int[1];
    int[] indexArrayVariable = null;
    int count = 0;
    for (int i = 0; i < chars.length; i++) {
      // 初回の対象文字
      if (chars[i] == key && count == 0) {
        indexArray[count] = i;
        count++;

        // 初回以降の対象文字
      } else if (chars[i] == key) {

        if (indexArrayVariable != null) {
          indexArrayVariable = Arrays.copyOf(indexArrayVariable, ++count);
        } else {
          indexArrayVariable = Arrays.copyOf(indexArray, ++count);
        }
        indexArrayVariable[indexArrayVariable.length - 1] = i;

      }
    }
    boolean firstFlg = false;
    for (int i : indexArrayVariable) {
      if(firstFlg) {
        System.out.print(", ");
      }
      System.out.print(i);
      firstFlg = true;
    }
  }
}

f:id:ts0818:20190103131207p:plain

拡張for文は、indexが無いから、最初とか最後で処理を変えたい時がなかなか面倒ですかね、まぁ、普通は、JavaScriptでデータ連携してHTMLでテキスト表示が多いと思うから、Javaでテキストを表示とかって機会はそうそう無いとは思うけれど。

Javaでできること、もっといろいろ知りたいですね。というか、ベストプラクティスを知りたいですね、悪手を実践してる気がしてしょうがないけど、判断できんです...

 

今回はこのへんで。