>source

텍스트 행의 배열 목록을 반복하고 검색을 반복하는 검색 방법을 작성하는 데 문제가 발생합니다.

라인에서 검색 쿼리의 발생을 강조하는 루프를 만들려면 벽으로 실행됩니다. 그래서 :

Enter Search Pattern: he
Line number 1
Her old collecting she considered discovered.
                    ^
Line number 2
So at parties he warrant oh staying. Square new horses and put better end.
              ^
Line number 8
Pursuit he he garrets greater towards amiable so placing.
        ^  ^
Line number 9
Nothing off how norland delight. Abode shy shade she hours forth its use.
                                                  ^

L 행을 검색하는 방법을 code화 할 수 있었지만 반복 할 검색을 얻으려는 벽을 때리고, 즉 추가 검색을 위해 사용자를 묻는 것입니다. 다른 검색을 수행하는 쿼리입니다.

또한 위와 같은 ^와 함께 강조 표시하는 방법은 어떻습니까? 나는 나를 도울 것을 찾을 수 없었습니다.

여기에 메소드의 code가 있습니다. 메인 및 검색 방법을 포함했습니다.

public static void main(String[] args)throws IOException{
  if(args.length== 0){
    System.out.println("Error, usage: java ClassName inputfile");
    System.exit(1);
  }
  File randomText= new File(args[0]);
    if(randomText.exists() &
&
 randomText.isFile()){
      processFile(randomText);
    } else{
        System.err.println("ERROR: file does not exist");
        System.exit(1);
      }
//there are more methods to this program, like to call the search method, I just included the code in question.
 }
public static void search(ArrayList<String> lineList){
  Scanner userInput= new Scanner(System.in);
  System.out.println("Enter Search Pattern: ");
  String searchQuery= userInput.nextLine();
  int i=0;
  for (String line : lineList){
    i++;
    if(line.contains(searchQuery)){
      System.out.println("Line number " + i);
      System.out.println(line);
      }
    }
 }

  • 답변 # 1

    이런 종류의 일은 파일 회선 문자열과 가능한 문자열을 표시하는 데 사용되는 글꼴이 제대로 작동하는 것입니다. ^ ...)는 단일 스스로 형 폰트입니다. 단일 스스로 글꼴 내의 모든 문자는 동일한 고정 크기의 문자와 문자의 문자와 문자가 각각 같은 양의 수평 공간을 차지합니다. 이러한 글꼴의 예는 다음과 같습니다.

    Andalé Mono       Cascadia Code       Consolas            Courier
    Cutive Mono       DejaVu Sans Mono    Droid Sans Mono     Everson Mono
    Fira Mono         Fixed               Fixedsys            Go Mono
    HyperFont         IBM Plex Mono       Inconsolata         Iosevka
    Letter Gothic     Liberation Mono     Lucida Console      Menlo
    Monaco            Monofur             Monospace (Unicode) Nimbus Mono L
    Noto Mono         OCR-A               OCR-B               Overpass Mono
    Oxygen Mono       PragmataPro         Prestige Elite      ProFont
    PT Mono           Roboto Mono         Source Code Pro     Terminus
    Tex Gyre Cursor   UM Typewriter
    

    더 있습니다. 전체 목록을 위해 모노 스페이스 형식을 검색하십시오. 결론은 단일 스스패스 글꼴이 사용되는 경우 locator 문자 (^ )가 항상 원하는 검색 문자열이있는 정확한 시작 위치에 있음을 확신 할 수 있습니다. (들).

    지속적으로 검색을 수행하려면 전화를 걸어야합니다.검색()A.와 같은 루프의 메소드동안예를 들어 루프. 그런 다음 그런 다음을 수정해야합니다검색()메소드, 예를 들어 프롬프트에 입력되었지만 문자 'q

    //Continuously do one search after another until
    //q is supplied as a search query
    while (true) {
        if (search(list, true).equalsIgnoreCase("q")) {
            break;   //Break out of the 'while' loop
        }
        System.out.println();
    }
    System.out.println("<< DONE >>");
    

    search () 메소드 code는 필요할 경우 레터 케이스를 무시할 수 있습니다. ArrayList에 다음을 포함하는 경우 :

    ArrayList<String> list= new ArrayList<>();
    list.add("Her old collecting she considered discovered. ");
    list.add("So at parties he warrant oh staying. Square new horses and put better end.");
    list.add("Pursuit he he garrets greater towards amiable so placing.");
    

    그런 다음 그냥 전화하십시오검색 (목록, true);...에 만약검색 기준 프롬프트에서 제공된 결과 출력 결과가 다음과 같습니다.

    Enter Search Pattern: --> he
    Line number 1
    Her old collecting she considered discovered.
    ^                   ^
    Line number 2
    So at parties he warrant oh staying. Square new horses and put better end.
                  ^
    Line number 3
    Pursuit he he garrets greater towards amiable so placing.
            ^  ^
    

    여기에 새로운 search () 방법이 있습니다.

    public static String search(ArrayList<String> lineList, boolean ignoreLetterCase) {
        Scanner userInput= new Scanner(System.in);
        System.out.print("Enter Search Pattern (q to quit): --> ");
        String searchQuery= userInput.nextLine();
        if (searchQuery.equalsIgnoreCase("q")) {
            return "q";
        }
        int lineCounter= 0;
        for (String line : lineList) {
            lineCounter++;
            //Generate the 'location' string. Returns null
            //if the search item was not found!
            String found= getFoundDisplayLine(line, searchQuery, ignoreLetterCase);
            if (found != null) {
                System.out.println("Line number " + lineCounter);
                System.out.println(line);
                System.out.println(found);
            }
        }
        return "";
    }
    

    와 '위치'문자열을 생성하는 getFoundDisplayline () 메소드가 있습니다.

    public static String getFoundDisplayLine(String inputString, String queryString, boolean... ignoreLetterCase) {
        if (inputString== null || inputString.trim().isEmpty()) {
            return null;
        }
        String wrkStrg= inputString;
        String findStrg= queryString;
        boolean ignoreCase= false;
        if (ignoreLetterCase.length > 0) {
            ignoreCase= ignoreLetterCase[0];
        }
        if (ignoreCase) {
            wrkStrg= wrkStrg.toLowerCase();
            findStrg= queryString.toLowerCase();
        }
        String indexes= "";
        List<Integer> idx= new ArrayList<>();
        int index= wrkStrg.indexOf(findStrg);
        while (index >= 0) {
            idx.add(index);
            indexes += (indexes.isEmpty()) ? String.valueOf(index) : ", " + String.valueOf(index);
            index= wrkStrg.indexOf(findStrg, index + findStrg.length());
        }
        if (idx.isEmpty()) {
            return null;
        }
        StringBuilder sb= new StringBuilder("");
        for (int i= 0; i < inputString.length(); i++) {
            if (idx.contains(i)) {
                sb.append("^");
            }
            else {
                sb.append(" ");
            }
        }
        return sb.toString();
    }
    

  • 답변 # 2

    항상 완벽하게 줄이 될 것이라고 확신하지 못합니다. 그러나 이것은 작동해야합니다. 모든 캐릭터를위한 공간이있는 새로운 하이라이트 문자열을 구축하려고합니다.일치하는 시작과는 별도로검색어캐릭터가있는 곳^...에

    일치의 색인을 찾을 수 있습니다.검색어~에.

      public static String padString(int start, int index){
           String pad= new String();
           for(int i=start; i= 0){
              highlight= highlight + padString(highlight.length(), index) + "^";
              index= line.indexOf(searchQuery, index+1);
           }
           return highlight;
        }
        public static void search(ArrayList lineList){
          Scanner userInput= new Scanner(System.in);
          System.out.println("Enter Search Pattern: ");
          String searchQuery= userInput.nextLine();
          int i=0;
          for (String line : lineList){
            i++;
            if(line.contains(searchQuery)){
              System.out.println("Line number " + i);
              System.out.println(line);
              System.out.println(getHighlight(line, searchQuery));
              }
            }
         }
    

  • 이전 python : 나는 Pycharm 글꼴 크기를 400으로 설정하고, 키보드만을 통해 글꼴 크기를 재설정하는 데 어쨌든 설정되어 있습니까?
  • 다음 c# Windows 폼의 ListBox 본문을 클릭하십시오.