⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aternativeapproach.java

📁 Java开发最新的日志记录工具slf4j的源码
💻 JAVA
字号:
package org.slf4j.migrator;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.migrator.line.MultiGroupConversionRule;

import junit.framework.TestCase;

public class AternativeApproach extends TestCase {

  /**
   * In this test we see that we cans use more simple Pattern to do the
   * conversion
   * 
   */
  public void test() {
    MultiGroupConversionRule cr2 = new MultiGroupConversionRule(Pattern
        .compile("(.*)(Log)"));
    cr2.addReplacement(2, "LOGGER");

    String s = "abcd Log";
    Pattern pat = cr2.getPattern();
    Matcher m = pat.matcher(s);

    assertTrue(m.matches());
    String r = cr2.replace(m);
    assertEquals("abcd LOGGER", r);

    System.out.println(r);
  }

  /**
   * In this test we replace, using the simple Pattern (Log), the full Log
   * declaration and instanciation. This is not convenient because we will also
   * replace all String containing "Log".
   */
  public void test2() {
    Pattern pat = Pattern.compile("(Log)");
    String s = "abcd Log =";
    Matcher m = pat.matcher(s);
    assertTrue(m.find());
    String r = m.replaceAll("Logger");
    assertEquals("abcd Logger =", r);

    String s1 = "Log l = LogFactory.getLog(MyClass.class);";
    m = pat.matcher(s1);
    assertTrue(m.find());
    r = m.replaceAll("Logger");
    assertEquals("Logger l = LoggerFactory.getLogger(MyClass.class);", r);

    String s2 = "Logabc ";
    m = pat.matcher(s2);
    assertTrue(m.find());

    String s3 = "abcLog";
    m = pat.matcher(s3);
    assertTrue(m.find());
  }

  /**
   * In this test we use a simple Pattern to replace the log instanciation
   * without influence on Log declaration.
   * 
   */
  public void test3() {
    Pattern pat = Pattern.compile("LogFactory.getFactory\\(\\).getInstance\\(");
    String s = "Log log =  LogFactory.getFactory().getInstance(\"x\");";
    Matcher m = pat.matcher(s);
    assertTrue(m.find());
    String r = m.replaceAll("LoggerFactory.getLogger(");
    assertEquals("Log log =  LoggerFactory.getLogger(\"x\");", r);

    String nonMatching = "Log log = xxx;";
    pat.matcher(nonMatching);
    assertFalse(m.find());
  }

  /**
   * In this test we try to replace keyword Log without influence on String
   * containg Log We see that we have to use two differents Patterns
   */
  public void test4() {
    Pattern pat = Pattern.compile("(\\sLog\\b)");
    String s = "abcd Log =";
    Matcher m = pat.matcher(s);
    assertTrue(m.find());
    String r = m.replaceAll(" Logger");
    assertEquals("abcd Logger =", r);

    String s2 = "Logabcd ";
    m = pat.matcher(s2);
    assertFalse(m.find());

    String s3 = "abcdLogabcd ";
    m = pat.matcher(s3);
    assertFalse(m.find());

    String s4 = "abcdLog";
    m = pat.matcher(s4);
    assertFalse(m.find());

    String s5 = "Log myLog";
    m = pat.matcher(s5);
    assertFalse(m.find());

    Pattern pat2 = Pattern.compile("^Log\\b");
    Matcher m2 = pat2.matcher(s5);
    assertTrue(m2.find());
    r = m2.replaceAll("Logger");
    assertEquals("Logger myLog", r);
  }

  /**
   * In this test we combine two Pattern to achieve the intended conversion
   */
  public void test5() {
    Pattern pat = Pattern.compile("(\\sLog\\b)");
    String s = "public Log myLog =LogFactory.getFactory().getInstance(myClass.class);";
    Matcher m = pat.matcher(s);
    assertTrue(m.find());
    String r = m.replaceAll(" Logger");
    assertEquals("public Logger myLog =LogFactory.getFactory().getInstance(myClass.class);", r);

    Pattern pat2 = Pattern.compile("LogFactory.getFactory\\(\\).getInstance\\(");
    m = pat2.matcher(r);
    assertTrue(m.find());
    r = m.replaceAll("LoggerFactory.getLogger(");
    assertEquals("public Logger myLog =LoggerFactory.getLogger(myClass.class);", r);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -