JAVA获得某个数字的最后第几位是什么的方法,比如,1234567890,则获得最后第三位,则返回8
public class Test { // 字典,里面保存的是1,10,100,1000..直到long的最大允许位数
private static final long[] NUMBERS = new long[19]; static {
NUMBERS[0] = 1; for (int i = 1;
i <
19; i++) {
NUMBERS[i] =
NUMBERS[i - 1] * 10;
}
} public
static void main(String[] args) {
long number = 1234567890123456789L;
System.out.println("测试取得倒数第几位");
System.out.println(getNumberAtLast(number, 3));
System.out.println(getNumberAtLast2(number, 3));
System.out.println(getNumberAtLast3(number, 3)); int total = 1000000; long begin = System.nanoTime(); for (int i = 0;
i <
total; i++) {
getNumberAtLast(number, 3);
}
System.out.println("getNumberAtLast =" + (System.nanoTime() - begin));
begin =
System.nanoTime();
for (int i = 0;
i <
total; i++) {
getNumberAtLast2(number, 3);
}
System.out.println("getNumberAtLast2=" + (System.nanoTime() - begin));
begin =
System.nanoTime();
for (int i = 0;
i <
total; i++) {
getNumberAtLast3(number, 3);
}
System.out.println("getNumberAtLast3=" + (System.nanoTime() - begin));
System.out.println("测试取得正数第几位");
System.out.println(getNumberAtFirst(number, 3));
System.out.println(getNumberAtFirst2(number, 3));
begin =
System.nanoTime();
for (int i = 0;
i <
total; i++) {
getNumberAtFirst(number, 3);
}
System.out.println("getNumberAtFirst =" + (System.nanoTime() - begin));
begin =
System.nanoTime();
for (int i = 0;
i <
total; i++) {
getNumberAtFirst2(number, 3);
}
System.out.println("getNumberAtFirst2=" + (System.nanoTime() - begin));
} public
static int getNumberAtLast(long number, int index) { for (; index > 1;
index--)
{
number /=
10;
} return
(int) (number % 10);
} public
static int getNumberAtLast2(long number, int index) {
String str =
Long.toString(number);
if (str.length() < index) { return 0;
} return
str.charAt(str.length()
- index) - 0x30; // 数字0的字符形式 } public static int getNumberAtLast3(long number, int index) { return (int) ((number / (NUMBERS[index - 1])) % 10);
} public
static int getNumberAtFirst(long number, int index) { int place = getNumberIndex(number);
number /=
NUMBERS[place
- index + 1]; return (int) (number % 10);
} public
static int getNumberAtFirst2(long number, int index) {
String str =
Long.toString(number);
return str.charAt(index - 1) - 0x30; // 数字0的字符形式 } private static final int getNumberIndex(long number) { return getNumberIndexR(number, 0, 19);
} private
static final int getNumberIndexR(long number, int left, int right) { if (right <= left + 1)
{ return
left;
} int
mid = (right - left) / 2 + left; if (NUMBERS[mid] > number) { return getNumberIndexR(number, left, mid);
} else
{ return getNumberIndexR(number, mid, right);
}
}
}
运行结果:
测试取得倒数第几位
7
7
7
getNumberAtLast =74142943
getNumberAtLast2=379321953
getNumberAtLast3=37117566
测试取得正数第几位
3
3
getNumberAtFirst =136200830
getNumberAtFirst2=375250207
转自http://www.update8.com/Program/Java/7039.html
另外,我在我的程序中运用到的是split方法,以下是在网上找的一些关于split方法的一些总结:(转自网络)
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or
n=?”,把三个都分隔出来,可以用String.split("and|or");
使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。