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()。