Android-Voip项目第一阶段问题总结

写了一小天的代码,发现了很多问题。

  1. 字符串处理函数splite在使用过程中要注意转义。我这里使用了”$”作为了信息传递的分割符号,然而单步调试的时候发现无法分割,果然是转义符号在作祟。

雨点点的博客
http://blog.sina.com.cn/gsh85
在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。
我们看jdk doc中说明
public String[] split(String regex)
Splits this string around matches of the given regular expression.
参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码:
用竖线 | 分隔字符串,你将得不到预期的结果
String[] aa = “aaa|bbb|ccc”.split(“|”);
//String[] aa = “aaa|bbb|ccc”.split(“|”); 这样才能得到正确的结果
for (int i = 0 ; i
System.out.println(“–”+aa[i]);
}
用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此
String[] aa = “aaa*bbb*ccc”.split(“*”);
//String[] aa = “aaa|bbb|ccc”.split(“\*”); 这样才能得到正确的结果
for (int i = 0 ; i
System.out.println(“–”+aa[i]);
}
显然,+ * 不是有效的模式匹配规则表达式,用”\*” “\+”转义后即可得到正确的结果。
“|” 分隔串时虽然能够执行,但是却不是预期的目的,”|”转义后即可得到正确的结果。
还有如果想在串中使用”\”字符,则也需要转义.首先要表达”aaaa\bbbb”这个串就应该用”aaaa\bbbb”,如果要分隔就应该这样才能得到正确结果:
String[] aa = “aaa\bbb\bccc”.split(“\\”);

我们发现java doc里面给出的splite的参数名是”regex“,意为正则表达式。

正则需要转义字符:’$’, ‘(‘, ‘)’, ‘*’, ‘+’, ‘.’, ‘[‘, ‘]’, ‘?’, ‘\’, ‘^’, ‘{‘, ‘}’, ‘|’。
用到的时候确实要注意一下。

  1. 一个网卡对应一个ip地址
    如果使用电脑开的wifi来跟电脑进行通信,那么要查找该网络之下的主机地址。

  2. java pc程序获取键盘输入

喜欢天才的博客
http://blog.sina.com.cn/u/2480694892Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:
以下将列出几种方法:
方法一:从控制台接收一个字符,然后将其打印出来
import java.io.*;
public static void main(String [] args) throws IOException{
System.out.print(“Enter a Char:”);
char i = (char) System.in.read();
System.out.println(“your char is :”+i);
}
虽然此方式实现了从键盘获取输入的字符,但是System.out.read()只能针对一个字符的获取,同时,获取进来的变量的类型只能是char,当我们输入一个数字,希望得到的也是一个整型变量的时候,我们还得修改其中的变量类型,这样就显得比较麻烦。
2
方法二:从控制台接收一个字符串,然后将其打印出来。 在这个题目中,我们需要用到BufferedReader类和InputStreamReader类
import java.io.*;
public static void main(String [] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println(“Enter your value:”);
str = br.readLine();
System.out.println(“your value is :”+str);
}
这样我们就能获取我们输入的字符串。
3
方法三:这种方法我认为是最简单,最强大的,就是用Scanner类
import java.util.Scanner;
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入你的姓名:”);
String name = sc.nextLine();
System.out.println(“请输入你的年龄:”);
int age = sc.nextInt();
System.out.println(“请输入你的工资:”);
float salary = sc.nextFloat();
System.out.println(“你的信息如下:”);
System.out.println(“姓名:”+name+”\n”+”年龄:”+age+”\n”+”工资:”+salary);
}
这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,只需做一点小小的改变,就能够实现功能!无疑他是最强大的!
_
但是,在使用第三种输入方法的时候有一个需要注意的地方,就是nextLine()函数,在io包中有一个和他功能一样的函数我next()函数,他们的功能一样,但是在实现上有什么差别呢,请看下面代码:
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“请输入你的年龄:”);
int age = sc.nextInt();
System.out.println(“请输入你的姓名:”);
String name = sc.nextLine();
System.out.println(“请输入你的工资:”);
float salary = sc.nextFloat();
System.out.println(“你的信息如下:”);
System.out.println(“姓名:”+name+”\n”+”年龄:”+age+”\n”+”工资:”+salary);
}
这段代码和上边第三种实现输入方法给出的例子代码区别在于,这段代码先执行nextInit()再执行nextLine(),而第三种方法的例子是先执行nextLine(),再执行nextInit(),当你在运行着两段代码的时候你会发现第三种方法的例子可以实现正常的输入,而这段代码却在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入工资这里,(可以自己运行代码看看)这是为什么呢?其实,在执行nextInit()函数之后,敲击了enter回车键,回车符会被nextLine()函数吸收,实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数),前面讲到和nextLine()功能一样的函数next(),他们的区别就在于:next()函数不会接收回车符和tab,或者空格键等,所以在使用nextLine()函数的时候,要注意敲击的回车符有个被其吸收,导致程序出现BUG!!!
_
最后小小的总结一下next()和nextLine()的区别:
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。

4. Android 开发中Handler的用法。
Handler作为Activity的成员变量。在Activity的生存周期中不断监控自己的消息队列。
Activity中产生的线程可以调用
* handler.post(Runnable)
* handler.sendEmptyMessage(int);
方法来实现对于主线程的信息返回。第一种方法中的Runnable中的run()是在ui线程里面调用的。

  1. @param 的写法

//*
*@param 变量名 变量解释
*@param 变量名 变量解释
*//
写在要解释的函数之前,android studio会自动与你的函数的变量相关联

感想

  • 实际去做一些事情要比枯槁的理论学习高效地多页快乐地多,多多经历项目结合理论知识。
  • 自己写一个pc 服务器端接收输入在模拟命令输出回去,似乎是一个不错的调试方法。但是复杂一些可能不行了。
  • android 的一些书籍和例子,java的一些书籍和例子,回过头来再读确实可以领悟到很多新的东西。

你可能感兴趣的:(jdk,android,函数,调试)