嘿牛程序员_成都传智博客_讨论字符串中字符出现的次数(续二:通过对象列表实现按次序输出)

来源:互联网 发布:电影特效制作软件 编辑:程序博客网 时间:2024/05/13 10:25

---------------------- android培训、java培训、期待与您交流! ----------------------

微笑本节继续介绍将一组字符串中不同的字符出现的次数按多少次序输出
        前面我们几经说到,按多少次序输出的关键问题是需要借助一个数组或者容器来接收字符以及出现的次数。前面请我们已经通过定义一个数组
来实现,下面我们主要通过定义一个对象以及list接口、Comparable接口等来实现。

    方法介绍:

    接口 Comparable<T>此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo 方法被称为它的自然比较方法。我们驻澳通过覆盖compareTo它的方法来实现对象对比。

    接口 List<E>所有超级接口:Collection<E>, Iterable<E> 所有已知实现类: AbstractList,AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList,Stack, Vector

    list 的get方法:Eget(int index)返回列表中指定位置的元素。

    ArrayList的add方法:public boolean add(E e)将指定的元素添加到此列表的尾部。

//实现如下
package javaArray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class TestSortString2 { 
     public static void main(String[] args)
 {
      String st="abadcdffbaebaujgsajfgdsfjdfdfjjdfksj'';'";
   try {
       sortStringByObject(st);
   } catch (Exception e) {
    // TODO: handle exception
   }
 }
     private static void  sortStringByObject(String st){
         String sb=st;
   //将字符串转化成字符型数组
   char []c=sb.toCharArray();
   //对字符型数组进行排序
   Arrays.sort(c);
   //测试排序后的字符型数组
   System.out.println("字符型数组排序后的结果");
   for(int i=0;i<c.length;i++){
    System.out.print(c[i]);
   }
   //将排序后的数组转化成字符串
   String sr=new String(c);
   //测试
   System.out.println("\n"+"转化成字符串");
   System.out.println(sr);
   int m=0;
   int n=0;
   int s=0;
   int f=0;
   //定义对象数组
   SortString2 []p=new SortString2[sr.length()];
   //获得对象列表
   List<SortString2>list=new ArrayList<SortString2>();
   //获得由字符和数字组成的字符串
   for(int j=0;j<sr.length();j++){
      m=sr.indexOf(sr.charAt(j)) ;
      n=sr.lastIndexOf(sr.charAt(j));
      s=(n-m)+1;
      p[f] = new SortString2(sr.substring(j,j+1),s);
      list.add(p[f]);
      j=j+s-1;
      f=f+1;
         }
  System.out.println("==排序前==");
     for(int i=0;i<list.size();i++)
     {
      SortString2 t=list.get(i);
      System.out.print(t.getName()+":"+t.getIndex());
     }
     System.out.println("\n"+"==升序排序==");
     Collections.sort(list);
     String sRise="";
     for(int i=0;i<list.size();i++)
     {
      SortString2 t=list.get(i);
      sRise=sRise+t.getName()+":"+t.getIndex()+","; 
     }
     System.out.print(sRise.substring(0,sRise.lastIndexOf(',')));
     System.out.println("\n"+"==降序排列==");
     Collections.sort(list, Collections.reverseOrder());
     String sDown="";
     for(int i=0;i<list.size();i++)
     {
      SortString2 t=list.get(i);
      sDown=sDown+t.getName()+":"+t.getIndex()+",";
     }
     System.out.print(sDown.substring(0,sRise.lastIndexOf(',')));
     }
}
/*
 * 对象排序2-自定义
     实现了Comparable接口,重写了compareTo方法

 */
class SortString2 implements Comparable<SortString2>
{
 private String name;
 private int index;

 public SortString2()
 {
  super();
 }
    public SortString2(String name,int index)
    {
     this.name=name;
     this.index=index;
    };
    //sort方法中会调用compare方法进行排序
 public int compareTo(SortString2 t)
 {
  int num=0;
  try
  {
   if(this.getIndex()>t.getIndex())
   {
    num= 1;
   }
   else
    if(this.getIndex()<t.getIndex())
    {
    num= -1;
       }
    else
        {
       num=0;
        }
   /* 名称比较
    num=
           */

  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
  return num;
 }
 public String getName()
 {
  return name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
 public int getIndex()
 {
  return index;
 }
 public void setIndex(int index)
 {
  this.index = index;
 }
}
再见

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

原创粉丝点击