惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
Jina AI
Jina AI
D
Docker
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - Liren

查找目录中同名的文件或者文件夹 获取设置一个字节某一个位的数值 基于JMS的数据交换既数据互操作平台的解决方案 Spring MVC基于注解的Junit测试 Spring MVC 3中关于url-pattern设成"/"后,资源访问问题 博文阅读密码验证 - 博客园 NotificationManager - Liren - 博客园 发送短信 调用系统联系人列表 Android 给自己的类加个事件 用代码旋转屏幕 - Liren - 博客园 Android SQLiteHelper Cassandra API60 Java 代码示例 Cassandra Java 使用TimeUUIDType 转:在 CLI 中練習 Data Model asp.net 实现一个简单CAS Server - Liren Ajax跨域访问代理类,支持GET和POST方法 Python 学习笔记:需要仔细阅读一个函数 Python 学习笔记: 备份工具
MorseCodeConverter 自用留存 - Liren - 博客园
Liren · 2011-01-23 · via 博客园 - Liren

/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      
http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 
*/package com.example.android.apis.os;/** Class that implements the text to morse code coversion */
class MorseCodeConverter {
    
private static final long SPEED_BASE = 100;
    
static final long DOT = SPEED_BASE;
    
static final long DASH = SPEED_BASE * 3;
    
static final long GAP = SPEED_BASE;
    
static final long LETTER_GAP = SPEED_BASE * 3;
    
static final long WORD_GAP = SPEED_BASE * 7;/** The characters from 'A' to 'Z' */
    
private static final long[][] LETTERS = new long[][] {
        
/* A */ new long[] { DOT, GAP, DASH },
        
/* B */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DOT },
        
/* C */ new long[] { DASH, GAP, DOT, GAP, DASH, GAP, DOT },
        
/* D */ new long[] { DASH, GAP, DOT, GAP, DOT },
        
/* E */ new long[] { DOT },
        
/* F */ new long[] { DOT, GAP, DOT, GAP, DASH, GAP, DOT },
        
/* G */ new long[] { DASH, GAP, DASH, GAP, DOT },
        
/* H */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT },
        
/* I */ new long[] { DOT, GAP, DOT },
        
/* J */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DASH },
        
/* K */ new long[] { DASH, GAP, DOT, GAP, DASH },
        
/* L */ new long[] { DOT, GAP, DASH, GAP, DOT, GAP, DOT },
        
/* M */ new long[] { DASH, GAP, DASH },
        
/* N */ new long[] { DASH, GAP, DOT },
        
/* O */ new long[] { DASH, GAP, DASH, GAP, DASH },
        
/* P */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DOT },
        
/* Q */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DASH },
        
/* R */ new long[] { DOT, GAP, DASH, GAP, DOT },
        
/* S */ new long[] { DOT, GAP, DOT, GAP, DOT },
        
/* T */ new long[] { DASH },
        
/* U */ new long[] { DOT, GAP, DOT, GAP, DASH },
        
/* V */ new long[] { DOT, GAP, DOT, GAP, DASH },
        
/* W */ new long[] { DOT, GAP, DASH, GAP, DASH },
        
/* X */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DASH },
        
/* Y */ new long[] { DASH, GAP, DOT, GAP, DASH, GAP, DASH },
        
/* Z */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DOT },
    };
/** The characters from '0' to '9' */
    
private static final long[][] NUMBERS = new long[][] {
        
/* 0 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DASH },
        
/* 1 */ new long[] { DOT, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DASH },
        
/* 2 */ new long[] { DOT, GAP, DOT, GAP, DASH, GAP, DASH, GAP, DASH },
        
/* 3 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DASH, GAP, DASH },
        
/* 4 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DASH },
        
/* 5 */ new long[] { DOT, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DOT },
        
/* 6 */ new long[] { DASH, GAP, DOT, GAP, DOT, GAP, DOT, GAP, DOT },
        
/* 7 */ new long[] { DASH, GAP, DASH, GAP, DOT, GAP, DOT, GAP, DOT },
        
/* 8 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DOT, GAP, DOT },
        
/* 9 */ new long[] { DASH, GAP, DASH, GAP, DASH, GAP, DASH, GAP, DOT },
    };
private static final long[] ERROR_GAP = new long[] { GAP };/** Return the pattern data for a given character */
    
static long[] pattern(char c) {
        
if (c >= 'A' && c <= 'Z') {
            
return LETTERS[c - 'A'];
        }
        
if (c >= 'a' && c <= 'z') {
            
return LETTERS[c - 'a'];
        }
        
else if (c >= '0' && c <= '9') {
            
return NUMBERS[c - '0'];
        }
        
else {
            
return ERROR_GAP;
        }
    }
static long[] pattern(String str) {
        
boolean lastWasWhitespace;
        
int strlen = str.length();// Calculate how long our array needs to be.
        int len = 1;
        lastWasWhitespace 
= true;
        
for (int i=0; i<strlen; i++) {
            
char c = str.charAt(i);
            
if (Character.isWhitespace(c)) {
                
if (!lastWasWhitespace) {
                    len
++;
                    lastWasWhitespace 
= true;
                }
            } 
else {
                
if (!lastWasWhitespace) {
                    len
++;
                }
                lastWasWhitespace 
= false;
                len 
+= pattern(c).length;
            }
        }
// Generate the pattern array.  Note that we put an extra element of 0
        
// in at the beginning, because the pattern always starts with the pause,
        
// not with the vibration.
        long[] result = new long[len+1];
        result[
0= 0;
        
int pos = 1;
        lastWasWhitespace 
= true;
        
for (int i=0; i<strlen; i++) {
            
char c = str.charAt(i);
            
if (Character.isWhitespace(c)) {
                
if (!lastWasWhitespace) {
                    result[pos] 
= WORD_GAP;
                    pos
++;
                    lastWasWhitespace 
= true;
                }
            } 
else {
                
if (!lastWasWhitespace) {
                    result[pos] 
= LETTER_GAP;
                    pos
++;
                }
                lastWasWhitespace 
= false;
                
long[] letter = pattern(c);
                System.arraycopy(letter, 
0, result, pos, letter.length);
                pos 
+= letter.length;
            }
        }
        
return result;
    }
}