天天看點

57個挑戰(python+java)-lesson51v2,增加一個模糊查詢

作者:飛霜luke

題目清單

57個挑戰(python+java)-lesson51v2,增加一個模糊查詢

在上面需要增加一個挑戰問題,支援模糊查詢。

java 版本實作:

import ch.qos.logback.classic.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import org.bson.*;
import com.mongodb.*;
import com.mongodb.client.*;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Pattern;

// 按照這篇文章來實作的關閉 IDEA 控制台上的mongoclient 的 debug 日志
// https://stackoverflow.com/questions/30137564/how-to-disable-mongodb-java-driver-logging
public class PushingNotesv4 {


    Scanner sc = new Scanner(System.in);
    String note ;
    int controlsiginal=0;
    String mongoUri = "mongodb://127.0.0.1:27017";
    MongoClientURI connStr = new MongoClientURI(mongoUri);
    MongoClient mongoClient = new MongoClient(connStr);

    String info ="";
    void controllogic()
    {
        this.Get_input();
        if(this.controlsiginal == 1)
        {
            this.insert_mongo();
        }
        else if (this.controlsiginal == 2)
        {
            this.display_mongo();
        }
        else if (this.controlsiginal == 3)
        {
            this.Search_mongo();
        }
        else{
            //do nothing
        }



    }


    void insert_mongo()
    {
        try {
            // 使用名為 someonedb 的資料庫
            MongoDatabase database = mongoClient.getDatabase("57challenge");
            // 取得集合/表 someonetable 句柄
            MongoCollection<Document> collection = database.getCollection("note");

            // 1.準備時間
            SimpleDateFormat sdf = new SimpleDateFormat();// 格式化時間
            sdf.applyPattern("yyyy-MM-dd");// a為am/pm的标記
            Date date = new Date();
            String time = sdf.format(date);

            //2.插入時間和内容
            Document doc = new Document();
            doc.append("time", time);
            doc.append("note", this.note);

            // 3. 寫入資料
            collection.insertOne(doc);
            //System.out.println("insert document: " + doc);


        } finally {
            //關閉連接配接
            mongoClient.close();
        }
    }

    void display_mongo() {
        try {
            // 使用名為 someonedb 的資料庫
            MongoDatabase database = mongoClient.getDatabase("57challenge");
            // 取得集合/表 someonetable 句柄
            MongoCollection<Document> collection = database.getCollection("note");

            MongoCursor<Document> cursor = collection.find().iterator();

            while (cursor.hasNext()) {
                //System.out.println(cursor.next());
                Document a = cursor.next();
                System.out.println(a.get("time") + "--" + a.get("note"));
            }


        }finally {
            //關閉連接配接
            mongoClient.close();
        }
    }

    void Search_mongo(){
        try {
            // 使用名為 someonedb 的資料庫
            MongoDatabase database = mongoClient.getDatabase("57challenge");
            // 取得集合/表 someonetable 句柄
            MongoCollection<Document> collection = database.getCollection("note");

            Pattern pattern = Pattern.compile("^.*"+this.info+".*#34;,Pattern.CASE_INSENSITIVE);
            BasicDBObject query = new BasicDBObject();
            query.put("note",pattern);
            MongoCursor<Document> cursor = collection.find(query).iterator();

            while (cursor.hasNext()) {
                //System.out.println(cursor.next());
                Document a = cursor.next();
                System.out.println(a.get("time") + "--" + a.get("note"));
            }


        }finally {
            //關閉連接配接
            mongoClient.close();
        }
    }



    void Get_input(){
        System.out.println("請輸入資料,以這個模式輸入: mynotes new 日記 或者 mynotes show ");
        String content = sc.nextLine();
        String pattern = "^mynotes new.*";
        String pattern2 = "^mynotes show.*";
        String pattern3 = "^mynotes search.*";
        if(Pattern.matches(pattern,content)) {
            // 1寫入邏輯
            // System.out.println("這是插入邏輯");
            this.note = content.replaceFirst("mynotes new","");
            //System.out.println(this.note);
            this.controlsiginal = 1;

        }

        else if(Pattern.matches(pattern2,content))
        {
            //2.查詢邏輯
            System.out.println("這是查詢邏輯");
            this.controlsiginal = 2;

        }
        else if(Pattern.matches(pattern3,content))
        {
            //3.模糊查詢邏輯
            System.out.println("這是模糊查詢邏輯");
            this.info = content.replaceFirst("mynotes search","").replaceFirst("^ ","");
            this.controlsiginal = 3;

        }
        else{
            System.out.println("輸入有錯誤,請重新輸入\n 輸入: mynotes new 日記 或者 mynotes show ");
        }


    }



    public static void main(String[] args) {
        // ((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger("org.mongodb.driver").setLevel(Level.ERROR);
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger rootlogger = loggerContext.getLogger("org.mongodb.driver");
        rootlogger.setLevel(Level.ERROR);

        while(true){
            PushingNotesv4 lesson50 = new PushingNotesv4();
            //lesson50.connect_mongo();
            // lesson50.insert_db();
            lesson50.controllogic();
        }


    }
}

           

主要這三列做了修改

  • Pattern pattern = Pattern.compile("^.*"+this.info+".*#34;,Pattern.CASE_INSENSITIVE);
  • BasicDBObject query = new BasicDBObject();
  • query.put("note",pattern);
  • MongoCursor<Document> cursor = collection.find(query).iterator();

在FIND 裡面增加一個查詢條件。

效果圖:

57個挑戰(python+java)-lesson51v2,增加一個模糊查詢