1.汉字转换位汉语拼音,英文字符不变
/** * 汉字转换位汉语拼音,英文字符不变 * * @param chines * 汉字 * @return 拼音 */ public static String ChineseToSpell(String chines) { String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray( nameChar[i], defaultFormat)[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyinName += nameChar[i]; } } return pinyinName; }
2.如果输入的是英文字符搜索listview
/** * 根据输入的首字母判断 * * @param edit * 输入的字符 * @param list * 用户的名字 * @return */ public boolean SearchForSpell(String edit, String list) { int index = edit.length(); String string = ""; if (index > list.length()) { return false; } else { for (int i = 0; i < index; i++) { string += (ChineseToSpell(list.substring(i, i + 1).toString())) .substring(0, 1); } if (edit.equals(string)) { return true; } if (edit.equals(string.toUpperCase())) { return true; } } return false; }
3.如果输入中文汉字搜索
/** * 根据输入的汉字母判断 * * @param edit * 输入的字符 * @param list * 用户的名字 * @return */ public boolean SerachForChinese(String edit, String list) { int index = edit.length(); String string = ""; if (index > list.length()) { return false; } else { string = list.substring(0, index); if (edit.equals(string)) { return true; } } return false; }
4.listviw中文英文的排序
/** * list集合根据汉字排序 * * @param list * @return */ public ArrayList<Map<String, String>> sortToList( ArrayList<Map<String, String>> list) { ArrayList<Map<String, String>> sortList = new ArrayList<Map<String, String>>(); String str[] = new String[list.size()]; for (int i = 0; i < str.length; i++) { str[i] = list.get(i).get("usernickname"); } Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); Arrays.sort(str, cmp); for (int i = 0; i < str.length; i++) { for (int j = 0; j < str.length; j++) { // sortList.add(str[i]); if (str[i].equals(list.get(j).get("usernickname"))) { sortList.add(list.get(j)); } } } return sortList; }
5.获取字符串里面的拼音
public StringBuffer getSpell(String string) { StringBuffer result = new StringBuffer(); for (int i = 0; i < string.length(); i++) { char a = string.charAt(i); if ((((int) a) >= 65 && ((int) a) <= 90) || (((int) a) >= 97 && ((int) a) <= 122)) { result.append(a); } } return result; }
解释一个操作系统的实现/chapter6/r中代码。
程序流程如下:
1、把Loader中的GDT和esp挪到Kernel中,初始化IDTPTR
2、初始化8259,初始化IDT,初始化GDT中的TSS和LDT两个描述符,以及初始化TSS
3、初始化进程表,指定时钟中断处理程序,让8259可以接受中断,restart开始从ring0内核切换到ring1进程执行
4、当发生时钟中断,或者Int 90时,由ring 1进程态切换到ring 0内核态,首先保存所有寄存器,启动进程调度函数,恢复被调度的进程的寄存器,从而由ring0内核态又回到了ring1新进程
程序最重要的一个图如下:
进程切换几个关键问题,从ring1切换到ring0,触发的条件一个是时钟中断,一个是get_ticks,每次发生中断的时候,此时的堆栈是进程表的堆栈,由硬件自动把ss,esp,eflag,cs,ip压入tss制定的堆栈中,然后执行到中断处理程序时call save压入一个retaddr,接着save代码中压入其他的寄存器,这样就形成了表中的样子,然后切换到内核栈,执行中断处理程序,里面有进程调度程序,就是p_proc_ready指向不同的进程表,之后赋值给esp,此时堆栈又切换为进程表的堆栈,依次pop之后,iretd,切换到ring0,此时的堆栈是进程的堆栈。如果get_ticks切换到sys_call执行的时候发生时钟中断,因为k_reenter作为限制,所以不能执行restart,而是执行restart_reenter,注意此时压入的寄存器参数放在内核栈,没有发生特权级转换,iretd后还是接着sys_call执行,直到此段代码执行结束。
系统调用就是采用中断的方式来切换特权级,ring1-->ring0,由ring0得到结果返回ring1。
进程调度就是不断修改进程表堆栈的esp,然后Pop,并切换到进程开始执行。ring1-->ring0,ring0-->ring1。
进程就是代码。
进程表就是操作系统中所说的PCD。
这里的进程只有运行和不运行两种状态。
1楼jltxgcy1小时前哈哈。1. 先注册广播 :(注意:注册广播要在接收广播之前)
MyReceiver receiver = new MyReceiver(); IntentFilter filter = new IntentFilter();// 创建IntentFilter对象 filter.addAction("android.intent.action.test"); registerReceiver(receiver, filter);
其中MyReceiver为广播接收器,可以同时注册多个广播registerReceiver(receiver, filter);只要filter.addAction("不一样的标识");
2.广播注册完后要发送广播
Intent intent = new Intent(); intent.setAction("android.intent.action.test");// action与接收器相同 Bundle bundle = new Bundle(); bundle.putSerializable("showAllFriends", list);//这里可以传送数据
intent.putExtras(bundle); sendBroadcast(intent);
3.接收广播
/** * 广播接收器 * * @author Administrator * */ public static class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras();
bundle.getSerializable("showAllFriends")); System.out .println("---------------------------------"); } public MyReceiver() { System.out.println("MyReceiver"); // 构造函数,做一些初始化工作,本例中无任何作用 } }