20155218第三次课堂实践

课堂实践

课堂笔记:

1. vim下的sort排序

1. sort -t :-k tosort.txt(正序排序)
2. sort -t :-rk tosort.txt(反序排序)
3. sort -t :-nrk tosort.txt(第几列排序)

2.Java String.split用法小结

在java.lang包中有String.split()方法,返回是一个数组

1、如果用“.”作为分隔的话,必须是如下写法,String.split("\."),这样才能正确的分隔开,不能用String.split(".");

2、如果用“|”作为分隔的话,必须是如下写法,String.split("\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\";

3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如,“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");

课堂实践代码:

模拟实现Linux下Sort -t : -nk 4的功能:

参考代码:

import java.util.*;
  2
  3 public class MySort {
  4     public static void main(String [] args) {
  5         String [] toSort = {"aaa:10:1:1",
  6                             "ccc:30:3:4",
  7                             "bbb:50:4:5",
  8                             "ddd:20:5:3",
  9                             "eee:40:2:20"};
 10
 11         System.out.println("Before sort:");
 12         for (String str: toSort)
 13                     System.out.println(str);
 14
 15         Integer [] tmp = new Integer [toSort.length];
 16         for(int i=0; i<tmp.length; i++)
 17             tmp[i] = new Integer(Integer.parseInt(toSort[i].split(":")[3]));
 18
 19         Arrays.sort(tmp);
 20
 21         System.out.println("After sort:");
 22
 23         for(int i=0; i<tmp.length; i++)
 24             for(int j=0; j<toSort.length; j++)
 25                 if(Integer.parseInt(toSort[j].split(":")[3]) == tmp[i].intValue())
 26                     System.out.println(toSort[j]);
 27     }
 28 }

我的错误:

String []tmp2=new  String[toSort.length];

                 for (int i = 0;i<toSort.length;i++){

                        tmp2 [i]=toSort[i].split(":");


                     tmp[i]=Integer.parseInt(tmp2[i][1]);

                 }

我把tmp2定义为了一个一维数组,看到参考代码后才认识到,split切割后的每一段都是string类型,所以需要一个二维数组。

在IDEA中以TDD的方式对String类和Arrays类进行学习

1. 代码:

/**
 * Created by xuzhihan on 17/5/10.
 */
import junit.framework.TestCase;
import junit.framework.TestResult;
import org.junit.Test;

import java.util.Arrays;

public class test extends TestCase {
    public static String[] ss = new String[20];
    @Test
    public void  testsort()
    {
        int [] arr={1,2,5,4};
        Arrays.sort(arr);
        assertEquals(5,arr[3]);
    }
    @Test
    public void  testcharAt()
    {
        String a1="hello world ";
        assertEquals('h',a1.charAt(0));
        assertEquals('e',a1.charAt(1));
    }
    @Test
    public void  testsplit()
    {
        String a1="hello:world";
        ss=a1.split(":");
        assertEquals("hello",ss[0]);
        assertEquals("world",ss[1]);
    }
    @Test
    public void  testbinaryseach()
    {
        int a[] = new int[] {1, 3, 4, 6, 8, 9};
        assertEquals(-4,Arrays.binarySearch(a, 5));
        assertEquals(0,Arrays.binarySearch(a, 1));
    }

}

2.疑惑:
为什么在binarySearch查找一个不存在的数会返回一个负值。
解答:
Arrays.binarySearch() 产生的返回值就要大于或等于0。否则,它产生负返回值,表示若要保持数组的排序状态此元素所应该插入的 位置。这个负值的计算方式是:

-(插入点)-1

“插入点”是指,第一个大于查找对象的元素在数组中的位置,如果数组中所有的元素值都小于要查找的对象,“插入点”就等于Arrays.size()。

posted @ 2017-05-11 11:42  徐志瀚  阅读(155)  评论(0编辑  收藏  举报