一、将字符串转成整型
字符串转整形是一个比较简单的算法,关键在于转换之前的一系列判断,
1、判断正负
2、去掉字符串中不能转化成整型的因素(包括各种符号、小数点、字母、空格)
3、去掉第一个数字前的所有0
4、结果是否超出整型范围(-2^31~2^31-1),处理
通过以上判断,我们得出了下面的程序:
package com.xtfggef.algo.stringtoint;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @time 2013/04/23
* @author egg
* @weibo http://weibo.com/xtfggef
*/
public class StringToInt {
static int flag = 1;
static String count = "";
static int value = 0;
/**
* get rid of the unuse char
*
* @param oldStr
* @return
*/
public static String judgeString(String oldStr) {
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(oldStr);
String newStr = m.replaceAll("").trim();
return newStr;
}
/**
* judge first char for '+' or '-'
*
* @param oldStr
* @return
*/
public static int judgeFirst(String oldStr) {
String ch = oldStr.substring(0, 1);
if ("-".equals(ch)) {
return -1;
} else {
return 1;
}
}
/**
* get rid of the '0' front of first number
*
* @param oldStr
* @return
*/
public static String getRidZero(String oldStr) {
return oldStr.replaceAll("^(0+)", "");
}
/**
* string to int core code
*
* @param count
* @return
*/
public static int stringToInt(String count) {
char value[] = count.toCharArray();
double sum = 0;
for (int i = 0; i < value.length; i++) {
sum = sum * 10 + value[i] - '0';
}
double tmp = sum * flag;
if (tmp <= Integer.MAX_VALUE && tmp >= Integer.MIN_VALUE) {
return (int) tmp;
} else {
return 0;
}
}
public static void main(String[] args) {
String s = "-07sadff65-=.,,,/,0849";
/* judge the first char */
flag = judgeFirst(s);
/* get rid of the non-validity char */
count = judgeString(s);
/* get rid of the 0 from the first number */
count = getRidZero(count);
/* string 2 int */
value = stringToInt(count);
if (value != 0) {
System.out.println(value);
} else {
System.out.println("value out of range of int!");
}
}
}
二、判断ip的合法性
1、从.的数量来看,必须等于3个
2、每两个点儿之间的数必须在0~255之间
3、每个数必须<9且>0,且不能是非数字的字符
4、第一个、最后一个字符不能是“.”,且第一个亦不能为0
5、每小节第一个数不能是0
6、不能有连续的.
7、每节不能有连续的0,或者如果第一个为0,第二个不能为0
为了代码月的方便,我建了一个常量类:
package com.xtfggef.algo.judgeip;
public class Constant {
public static String DOTMORETHANTHREE = "多于三个dot";
public static String LESSTHANTHREE = "少于三个dot";
public static String GREATTHAN = "单节不能大于255或者小于0";
public static String ISZERO = "每节开头不能为0";
public static String INVALIDCHAR = "无效的字符";
public static String ERRORS = "第一个字符不能为0和.,最后一个不能为.!";
public static String VALID = "IP 合法";
public static String INVALID = "IP 不合法!";
public static String TWODOTS = "不能有连续的dot";
public static String CANNOTISZERO = "每节不能连续两个数为0,或者第一个为0但是第二个不为0";
}
下面是判断类:
package com.xtfggef.algo.judgeip;
public class JudgeIp {
static int is_valid_ip(char[] ip) {
int section = 0;
int dot = 0;
int flag = 0;
int flag2 = 0;
int flag3 = 0;
if (ip[0] != '.' && ip[0] != '0' && ip[ip.length - 1] != '.') {
for (int i = 0; i < ip.length; i++) {
if (flag == 1) {
if (ip[i] == '.') {
System.out.println(Constant.TWODOTS);
return 0;
}
}
if (ip[i] == '.') {
dot++;
if (dot > 3) {
System.out.println(Constant.DOTMORETHANTHREE);
return 0;
}
if (section >= 0 && section <= 255) {
section = 0;
} else {
System.out.println(Constant.GREATTHAN);
return 0;
}
flag = 1;
flag2 = 0;
flag3 = 0;
} else if (ip[i] >= '0' && ip[i] <= '9') {
flag2++;
if (flag == 1) {
if (ip[i] == '0') {
flag3 = 1;
}
}
if (flag2 == 2 && flag3 == 1) {
System.out.println(Constant.CANNOTISZERO);
return 0;
}
section = section * 10 + ip[i] - '0';
flag = 0;
} else {
System.out.println(Constant.INVALIDCHAR);
return 0;
}
}
if (section >= 0 && section <= 255) {
if (3 == dot) {
section = 0;
System.out.println("IP address success!");
return 1;
} else {
System.out.println(Constant.LESSTHANTHREE);
return 0;
}
}
} else {
System.out.println(Constant.ERRORS);
return 0;
}
return 0;
}
public static void main(String[] args) {
String ip = "23.252.49.22";
System.out.println("ip:" + ip);
char new_ip[] = ip.toCharArray();
int flag = is_valid_ip(new_ip);
if (flag == 1) {
System.out.println(Constant.VALID);
} else {
System.out.println(Constant.INVALID);
}
}
}
感觉逻辑不多,但是判断起来还有点儿麻烦,总的来说暂时我是想不出什么问题了,大家去试试,多找几种情况,欢迎提出建议!
三、求最大公约数
这个非常简单,估计大多数人都能马上写出来:
package com.xtfggef.algo.gcd;
public class MaxGcd {
public static void main(String[] args) {
System.out.println(gcd(24, 12));
}
public static int gcd(int a, int b) {
while (a != b) {
if (a > b) {
a = a - b;
} else {
b = b - a;
}
}
return a;
}
}
文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法