Algorithm
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
输入
"123.45e+6"
返回值
true
代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
if(null == str || str.length() == 0){
return false;
}
boolean hasE = false, hasPoint = false, optL = false, optR = false;
int len = str.length();
int ePos = len;
int lOptPos = -1;
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if(c == '.'){
if(hasPoint || i >= ePos || i == len - 1){
return false;
}
hasPoint = true;
}else if(c == 'e' || c == 'E'){
if(hasE || i == 0 || i == len - 1 || i-1 == lOptPos){
return false;
}
ePos = i;
hasE = true;
}else if(c == '+' || c == '-'){
if(i == len - 1){
return false;
}
if(i < ePos){
if(optL || i != 0){
return false;
}
lOptPos = i;
optL = true;
}else{
if(optR || i - ePos != 1|| i == len - 1){
return false;
}
optR = true;
}
}else if(c >= '0' && c <= '9'){
continue;
}else{
return false;
}
}
return true;
}
}
Review
https://medium.com/androiddevelopers/android-nesting-intents-e472fafc1933
该文章介绍了为何不建议使用嵌套intent
假设有两个App A和B,若A App使用嵌套的intent通过B App调用startActivity,存在两个问题:
(1)若启动的Activity属于A App,那么必须将该Activity标记为exported才可通过B App启动,但如此一来其他App也可以启动这个Activity
(2)Client App可以借此启动B App的所有Activity,包括私有的、未设置exported的Activity等
因此官方建议,若使用跨应用的intent,可使用PendingIntent代替嵌套intent
Tips
1、弹出PopupWindow时背景变为半透明方案:
(1)获取窗体属性并设置透明度
注意:如果当前Activity的主题为透明,使用该方法设置时会一瞬间穿透显示到下方非透明主题的Activity,可能会影响用户体验。
(2)给需要弹出popupWindow的界面加上一层遮罩View
2、WebView与js交互,使用addJavascriptInterface方法进行对象映射,可以使web端调用客户端代码。
需注意接口需要使用@JavascriptInterface注解,并且接口名需与web端一致
3、使用RelativeLayout若需要使两个水平方向的按钮平分宽度,可以借助一个宽高都为0dp的View,将其设置为水平居中,两个按钮分别向其对齐,则可实现该效果
Share
http://www.xmltojava.com/
分享一个可以将xml布局转化为Java代码的网站,由于项目只支持用纯Java写界面,这个网站可以在一定程度提高开发效率,但是有部分属性无法转化为Java代码,需要自己额外处理。