经常用到的小细节

来源:互联网 发布:拍照搜题软件 编辑:程序博客网 时间:2024/04/28 21:37

 1、String a=”codingke”和 String a= new String(“codingke”)的区别:

String a="codingke" 会在堆里的字符串常量池中查找看有没有这个字符串
该方式可能不需要创建对象(如果常量池中已经存在的话,就不需要再创建了)
最多创建一个。

String a= new String(“codingke”)会强制性的在堆内存里边重新开辟一个空间,
如果常量池里边有的话,会创建出一个常量。
如果常量池中没有的话,则需要创建两个。 


2、&&和&的区别

a>5&&a<7  (性能更高)
先判断左边是不是成立。如果不成立,返回false。如果成立,在判断右边。如果右边不成立,返回false,如果成立,再判断两边成立不成立。

if(
a>5){
        if(a<7){
                ture;
        } else{
                
false;        
        }
}else{
        false;
}
a>5&a<7 (性能不高)
先判断左边成立不成立,再判断右边成立不成立,再判断一起成立不成立。 

3、Static关键字

1、使用static修饰一个属性(声明为static的变量实质上就是全局变量)
2、
使用static修饰一个方法(通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法)
3、
使用static修饰一个类
(1) 静态变量或方法,属于类而不属于对象,所以调用静态变量或方法时、应该使用类名直接调用,而不是使用对象去调用
(2)静态变量在内存中只会保留一份,由这个类共享。
(3)静态数据(变量和方法)在第一次使用时即载入内容,直接到程序退出,会一直在内存中,生命周期比较长。
(4 )静态方法不能 调用非静态数据,因为静态数据依赖于类,而不是对象。

 1、如何比较字符串,应该用”==”还是equals()?
总的来说,”==”是用来比较字符串的引用地址,而equals()才是比较字符串的值。两个值相同的字符串用”==”比较结果有可能是false,而用equals()则一定为true。除非两个字符串是同一个new出来的对象,不然比较字符串值是否相同应该要用equals()。

2、对那些安全敏感的信息,为什么用char[]存储要优于String?
String是不可变的,这就意味着它一旦被创建,就将永久驻留在内存中,直到垃圾回收器将其回收为止。然而用数组存储方式,你可以明确地改变数组中的元素,因此用数组方式,安全信息将有可能不存在系统内存的任何地方。

3、能否用字符串来声明switch语句?
JAVA 7及以后的版本是支持的。在JDK 7中,允许你使用字符串做switch语句的比较条件。jdk 6以前的版本,不能这样使用:
// java 7 only!
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4、如何将字符串转换成数字int类型?
int n = Integer.parseInt("10");
很简单,但却会经常用到,也很容易被忽略。

5、如何用空格字符来分割字符串?
我们可以很方便地用正则表达式来分割字符串,”s”表示空格字符,比如” “, “t”, “r”, “n”
String[] strArray = aString.split("s+"); 

 
 6、substring()方法究竟是什么?
在jdk 6中,substring()方法在原来字符串中提供了一个截取字符的窗口,它并没有创建一个新的String实例。如果你想创建新的字符数组,你可以在substring()后加一个空字符,就像这样:
str.substring(m, n) + ""
这样就会创建一个新的String实例,上面的方法有时候可以让你的程序运行速度更快,因为垃圾回收器可以将没用的大字符串回收走,并保留其子字符串。

7、String、StringBuilder和StringBuffer哪个更优?
String和StringBuilder:StringBuilder是可变的,也就是说用StringBuilder创建的字符串你可以随时改变它。StringBuilder和StringBuffer:StringBuffer是同步的,它是线程安全(thread-safe)的,但效率要比StringBuilder差得多。


8、如何重复输出字符串?
在Python中,我们只需要为字符串乘上一个数字就可以重复输出该字符串了。然而在Java中,我们可以用StringUtils的repeat()方法来实现,StringUtils是Apache公共语言库的其中一个类库成员。
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd

9、如何将字符串转换成日期类型?
你可以按以下方法来做,代码如下:
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
//Tue Sep 17 00:00:00 EDT 2013

10、如何统计指定字符在字符串中出现的频率
同样我们利用了Apache公共语言库中的StringUtils,代码如下:
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n); 

11、截取字符串:

s=s.substring(int begin);截取掉s从首字母起长度为begin的字符串,将剩余字符串赋值给s;

s=s.substring(int begin,int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;

12、字符串中是否包含另一个字符串:

String s="abcdefg";

s.contains("g");

13、获取屏幕尺寸

  DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;

14、android:background="@android:color/transparent" 透明按钮
15、android:gravity="top"设置光标在左上角
16、android:cursorVisible设定光标为显示/隐藏,默认显示。
17、android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()”

18、获取当前时间:

SimpleDateFormat formatter = new SimpleDateFormat ("yyyy/MM/dd+1 ");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str= formatter.format(curDate);
19、android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会text的背景设为该颜色,并且同时和background使用时覆盖后者。

20、android:drawableLeft在text的左边输出一个drawable,如图片。


21、editText.setInputType(InputType.TYPE_CLASS_NUMBER); //输入类型  
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); //最大输入长度  
editText.setTransformationMethod(PasswordTransformationMethod.getInstance()); //设置为密码输入框 



22、

 /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {
/*
* 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
* 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通)
* 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
*/
        String telRegex = "[1][3578]\\d{9}";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
        if (TextUtils.isEmpty(mobiles))
            return false;
        else
            return mobiles.matches(telRegex);
    }

23、
    /**
     * 验证邮箱格式
     * @param email
     * @return
     */
    public static boolean isEmail(String email) {
        String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
        Pattern p = Pattern.compile(str);
        Matcher m = p.matcher(email);
        return m.matches();
    }


24、判断fragment是不是显示

  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        //判断该Fragment时候已经正在前台显示  通过这两个判断,就可以知道什么时候去加载数据了
        if (isVisibleToUser && isVisible()) {
            initdata();
         
        }
        super.setUserVisibleHint(isVisibleToUser);
    }


0 0
原创粉丝点击