类库使用案例分析

类库使用案例分析

1、StringBuffer使用

定义一个StringBuffer类对象,然后通过append()方法向对象中添加26个小写字母,要求每次只添加一次,共添加26次,然后按照逆序的方式输出,并且可以删除前5个字符。

本操作主要是训练StringBuffer类中的处理方法,因为StringBuffer的主要特点是内容允许修改。

public class JavaAPIDemo{
   public static void main(String[] args) {
      StringBuffer stringBuffer = new StringBuffer();
      for (int i = 'a'; i <= 'z'; i ++) { //直接循环设置
         stringBuffer.append((char) i);  //保存字符
      }
      stringBuffer.reverse().delete(0 , 5);   //反转处理
      System.out.println(stringBuffer);
   }
}
//结果:utsrqponmlkjihgfedcba

因为StringBuffer的内容是允许修改的,而String内容不允许修改,现在的程序是一个单线程开发,所以不需要去考虑并发访问问题。

2、随机数组

利用Random类产生5个1~30之间(包括1和30)的随机整数

Random产生的随机数的操作之中会包含有数字0,所以此时不应该存在有数字0的问题

public class JavaAPIDemo{
   public static void main(String[] args) {
      int [] result= NumberFactory.create(5);
      System.out.println(Arrays.toString(result));
   }
}
class NumberFactory{
   private static Random random = new Random();
   
   /**
    * 通过随机数来生成一个数组的内容,该内容不包括0
    * @param len 要开辟的数组大小
    * @return 包含随机数的内容
    */
   public static int [] create(int len){
      int data [] = new int[len]; //开辟新的数组
      int foot = 0;
      while (foot < data.length){
         int num = random.nextInt(30);
         if (num != 0) {
            data [foot ++] = num;   //保存数据
         }
      }
      return data;
   }
}

3、Email验证

输入一个 Email地址,然后使用正则表达式验证该Email 地址是否正确。

对于此时的输入可以通过命令参数实现数据的输入,如果要想进行验证,最好的做法是设置一个单独的验证处理类。

class Validator{
   private Validator(){}
   public static boolean isEmail(String email){
      if (email == null || "".equals(email)) { //数据为空
         return false;
      }
      String regex = "\\w+@\\w+\\.\\w+";
      return email.matches(regex);
   }
}
public class JavaAPIDemo{
   public static void main(String[] args) {

      String emailA = "123@qq";
      String emailB = "123@163.com";
      if (Validator.isEmail(emailA)){
         System.out.println("emailA:输入的email的地址正确!");
      }
      if (Validator.isEmail(emailB)){
         System.out.println("emailB:输入的email的地址正确!");
      }
   }
}
//结果:emailB:输入的email的地址正确!

4、扔硬币

编写程序,用0~1之间的随机数来模拟扔硬币试验,统计扔1000次后出现正、反面的次数并输出。

class Coin{ //模拟抛硬币操作
   private int front;  //保存正面次数
   private int back;   //保存背面次数
   private Random random = new Random();
   
   /**
    * 抛硬币的处理
    * @param num 抛硬币的执行次数
    */
   public void throwCoin(int num){
      for (int i = 0; i < num; i++) {
         int temp = random.nextInt(2);
         if (temp == 0) {
            front ++;
         } else {
             back ++;
         }
      }
   }
   
   public int getFront() {
      return front;
   }
   
   public int getBack() {
      return back;
   }
}
public class JavaAPIDemo{
   public static void main(String[] args) {
      Coin coin = new Coin();
      coin.throwCoin(1000);
      System.out.println("正面出现的次数:" + coin.getFront() + "、背面出现的次数:" + coin.getBack());
   }
}
//结果:正面出现的次数:487、背面出现的次数:513

5、IP验证

编写正则表达式,判断给定的是否是一个合法的IP地址。.
IP地址的组成就是数字,对于数字的组成有一个基础的要求,第一位的内容只能是无、1、2,后面的内容可以0-5,第三位内容是0-9

class Validator{
   public static boolean validateIP(String ip){
      if (ip == null || "".equals(ip)) {
          return false;
      }
      String regex = "([12]?[0-9]?[0-9]\\.){3}[12]?[0-9]?[0-9]";
      if (ip.matches(regex)){ //验证通过,还需要对IP地址进行拆分处理
         String result [] = ip.split("\\."); //拆分数据
         for (int i = 0; i < result.length; i++) {
            int temp = Integer.parseInt(result[i]);
            System.out.println(temp);
            if (temp > 255) {
               return false;
            }
         }
      } else {
          return false;
      }
      return true;
   }

}
public class JavaAPIDemo{
   public static void main(String[] args) {
      String ip = "192.168.1.245";
      System.out.println(Validator.validateIP(ip));
   }
}
//结果:true

6、HTML拆分

给定下面的HTML代码:

要求对内容进行拆分,拆分后的结果是:

face Arial,Serif

size +2

color red

public class JavaAPIDemo{
   public static void main(String[] args) {
      String str = "<font face=\"Arial,Serif\" size=\"+2\" color=\"red\">";
      String regex = "\\w+=\"[a-zA-Z0-9,\\+]+\"";
      Matcher matcher = Pattern.compile(regex).matcher(str);
      while (matcher.find()) {
         String temp = matcher.group();
         String[] result = temp.split("=");
         System.out.println(result[0] + " " + result[1].replaceAll("\"" , ""));
      }
   }
}
//结果:
//face Arial,Serif
//size +2
//color red

7、国家代码

编写程序,实现国际化应用,从命令行输入国家的代号,例如,1表示中国,2表示美国,然后根据输入代号的不同调用不同的资源文件显示信息。

本程序的实现肯定要通过Locale类的对象来指定区域,随后利用ResourceBundle类加载资源文件

1、定义中文的资源文件:Message_zh_CN.properties

info=欢迎您的访问

2、定义英文的资源文件:Message_en_US.properties

info=Welcome

3、定义程序类加载控制

class MessageUtil{
   public static final int CHINA = 1;
   public static final int USA = 2;
   private static final String KEY = "info";
   private static final String BASENAME = "Resource.message";
   public String getMessage(int num) {
      Locale locale = this.getLocale(num);
      if (locale == null) {
          return null;
      } else {
          return ResourceBundle.getBundle(BASENAME , locale).getString(KEY);
      }
   }
   private Locale getLocale(int num) {
       switch (num) {
          case CHINA:
            return new Locale("zh" , "CN");
         case USA:
            return new Locale("en" , "US");
          default:
            return null;
       }
   }
}

public class JavaAPIDemo{
   public static void main(String[] args) {
      System.out.println(new MessageUtil().getMessage(1));
   }
}
//欢迎您的访问

8、学生信息比较

按照“姓名:年龄:成绩|姓名:年龄:成绩”的格式定必字符串“张三: 21:98|李四: 22:89|王五 20:70”,要求将每组值分别保存在 Student对象之中,并对这些对象进行排序,排序的原则为:按照成绩由高到低排序, 如果成绩相等,则按照年龄由低到高排序。

本程序最典型的做法是直接李荣比较器来完成处理。

class Student implements Comparable<Student> {
    private String name;
   private int age;
   private double score;
   
   public Student(String name, int age, double score) {
      super();
      this.name = name;
      this.age = age;
      this.score = score;
   }
   
   @Override
   public int compareTo(Student student) {
      if (score < student.score){
         return 1;
      } else if (score >student.score) {
          return -1;
      }else {
          return age - student.age;
      }
   }
   
   @Override
   public String toString() {
      return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", score=" + score +
            '}' + "\n";
   }
}

public class JavaAPIDemo{
   public static void main(String[] args) {
      String input = "张三:21:98|李四:22:89|王五:20:70";
      String[] result = input.split("\\|");
      Student[] students = new Student[result.length];
      for (int i = 0; i < result.length; i++) {
         String[] temp = result[i].split(":");
         students[i] = new Student(temp[0], Integer.parseInt(temp[1]), Double.parseDouble(temp[2]));
      }
      Arrays.sort(students);
      System.out.println(Arrays.toString(students));
   }
}
//结果:[Student{name='张三', age=21, score=98.0}
//, Student{name='李四', age=22, score=89.0}
//, Student{name='王五', age=20, score=70.0}
//]

结构化字符串处理:“内容|内容|”,如果有复杂的情况内容里面可能再有其它标记 “”

``

2、定义英文的资源文件:Message_en_US.properties

info=Welcome

3、定义程序类加载控制

class MessageUtil{
   public static final int CHINA = 1;
   public static final int USA = 2;
   private static final String KEY = "info";
   private static final String BASENAME = "Resource.message";
   public String getMessage(int num) {
      Locale locale = this.getLocale(num);
      if (locale == null) {
          return null;
      } else {
          return ResourceBundle.getBundle(BASENAME , locale).getString(KEY);
      }
   }
   private Locale getLocale(int num) {
       switch (num) {
          case CHINA:
            return new Locale("zh" , "CN");
         case USA:
            return new Locale("en" , "US");
          default:
            return null;
       }
   }
}

public class JavaAPIDemo{
   public static void main(String[] args) {
      System.out.println(new MessageUtil().getMessage(1));
   }
}
//欢迎您的访问
Sqoop 是一个用于在 Hadoop 生态系统中导入和导出数据的工具。在本关中,我们将学习如何使用 Sqoop 将数据从关系型数据库导入到 HBase 中。 首先,我们需要确保已经在 Hadoop 集群中安装SqoopHBase。然后,我们需要创建一个目标表来存储从关系型数据库中导入的数据。 在 HBase 中创建表: ``` create 'employees', 'personal', 'professional' ``` 现在,我们可以使用 Sqoop 将数据从关系型数据库中导入到 HBase 中。假设我们要从 MySQL 数据库中导入一个名为 employees 的表,该表包含以下列和数据: | id | name | age | salary | |----|------|-----|--------| | 1 | John | 25 | 50000 | | 2 | Mary | 30 | 60000 | | 3 | Jack | 40 | 70000 | 我们可以使用以下命令将该表导入到 HBase 中: ``` sqoop import --connect jdbc:mysql://localhost/employees --username root --password password --table employees --hbase-table employees --column-family personal --hbase-row-key id --hbase-create-table ``` 该命令将从 MySQL 数据库中选择所有列,并将它们插入到 HBase 表中。我们指定了 HBase 表的名称和列族名称,以及用于 HBase 行键的列。 如果 HBase 表不存在,Sqoop 将自动创建它。我们还指定了一个选项 hbase-create-table,以确保表已经存在,如果表不存在则会创建。如果不使用此选项,则需要手动创建 HBase 表。 我们可以使用以下命令查看导入的数据: ``` hbase shell scan 'employees' ``` 输出应如下所示: ``` ROW COLUMN+CELL 1 column=personal:age, timestamp=1576289403403, value=25 1 column=personal:name, timestamp=1576289403403, value=John 1 column=personal:salary, timestamp=1576289403403, value=50000 2 column=personal:age, timestamp=1576289403403, value=30 2 column=personal:name, timestamp=1576289403403, value=Mary 2 column=personal:salary, timestamp=1576289403403, value=60000 3 column=personal:age, timestamp=1576289403403, value=40 3 column=personal:name, timestamp=1576289403403, value=Jack 3 column=personal:salary, timestamp=1576289403403, value=70000 ``` 我们可以看到,导入的数据已经存储在 HBase 表中。现在,我们可以在 Hadoop 生态系统中使用这些数据进行分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyRedScarf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值