扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
lrc可以通过如下util工具类进行转换,如果想知道结果是否读取的有问题,可以直接用记事本打开lrc文件的,之后和输出结果比对一下就行。
来凤ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
package com.routon.utils;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.util.Log;
/**
* parse lrc file tool
* eg:
* utilLrc lrc = new utilLrc("/sdcard/test.lrc");
* get song name : String title = lrc.getTitle();
* get performer name : String artist = lrc.getArtist();
* get album name: String album = lrc.getAlbum();
* get lrcmaker name: String lrcMaker = lrc.getLrcMaker();
* get song list: ListStatement list = lrc.getLrcList();
*
* @author xuweilin
*
*/
public class utilLrc {
private static String TAG = "utilLrc";
public class Statement {
private double time = 0.0; //time, 0.01s
private String lyric = ""; //song word
/*
* get time
*/
public double getTime() {
return time;
}
/*
* set time
*/
public void setTime(double time) {
this.time = time;
}
/*
* set time.format:mm:ss.ms
*/
public void setTime(String time) {
String str[] = time.split(":|\\.");
this.time = Integer.parseInt(str[0])*60+Integer.parseInt(str[1])+Integer.parseInt(str[2])*0.01;
}
/*
* get lrc word
*/
public String getLyric() {
return lyric;
}
/*
* set lrc word
*/
public void setLyric(String lyric) {
this.lyric = lyric;
}
}
private BufferedReader bufferReader = null;
private String title = "";
private String artist = "";
private String album = "";
private String lrcMaker = "";
private ListStatement statements = new ArrayListStatement();
/*
*
* fileName
*/
public utilLrc(String fileName) throws IOException{
FileInputStream file = new FileInputStream(fileName);
bufferReader = new BufferedReader(new InputStreamReader(file, "utf-8"));
readData();
}
/*
* read the file
*/
private void readData() throws IOException{
statements.clear();
String strLine;
while(null != (strLine = bufferReader.readLine()))
{
if("".equals(strLine.trim()))
{
continue;
}
if(null == title || "".equals(title.trim()))
{
Pattern pattern = Pattern.compile("\\[ti:(.+?)\\]");
Matcher matcher = pattern.matcher(strLine);
if(matcher.find())
{
title=matcher.group(1);
continue;
}
}
if(null == artist || "".equals(artist.trim()))
{
Pattern pattern = Pattern.compile("\\[ar:(.+?)\\]");
Matcher matcher = pattern.matcher(strLine);
if(matcher.find())
{
artist=matcher.group(1);
continue;
}
}
if(null == album || "".equals(album.trim()))
{
Pattern pattern = Pattern.compile("\\[al:(.+?)\\]");
Matcher matcher = pattern.matcher(strLine);
if(matcher.find())
{
album=matcher.group(1);
continue;
}
}
if(null == lrcMaker || "".equals(lrcMaker.trim()))
{
Pattern pattern = Pattern.compile("\\[by:(.+?)\\]");
Matcher matcher = pattern.matcher(strLine);
if(matcher.find())
{
lrcMaker=matcher.group(1);
continue;
}
}
int timeNum=0;
String str[] = strLine.split("\\]");
for(int i=0; istr.length; ++i)
{
String str2[] = str[i].split("\\[");
str[i] = str2[str2.length-1];
if(isTime(str[i])){
++timeNum;
}
}
for(int i=0; itimeNum;++i)
{
Statement sm = new Statement();
sm.setTime(str[i]);
if(timeNumstr.length)
{
sm.setLyric(str[str.length-1]);
}
statements.add(sm);
}
}
sortLyric();
}
/*
* judge the string is or not date format.
*/
private boolean isTime(String string)
{
String str[] = string.split(":|\\.");
if(3!=str.length)
{
return false;
}
try{
for(int i=0;istr.length;++i)
{
Integer.parseInt(str[i]);
}
}
catch(NumberFormatException e)
{
Log.e(TAG, "isTime exception:"+e.getMessage());
return false;
}
return true;
}
/*
* sort the word by time.
*/
private void sortLyric()
{
for(int i=0;istatements.size()-1;++i)
{
int index=i;
double delta=Double.MAX_VALUE;
boolean moveFlag = false;
for(int j=i+1;jstatements.size();++j)
{
double sub;
if(0=(sub=statements.get(i).getTime()-statements.get(j).getTime()))
{
continue;
}
moveFlag=true;
if(subdelta)
{
delta=sub;
index=j+1;
}
}
if(moveFlag)
{
statements.add(index, statements.get(i));
statements.remove(i);
--i;
}
}
}
/**
* get title
* @return
*/
public String getTitle(){
return title;
}
/**
* get artist
* @return
*/
public String getArtist(){
return artist;
}
/**
* get album
* @return
*/
public String getAlbum(){
return album;
}
/**
* get lrc maker
* @return
*/
public String getLrcMaker(){
return lrcMaker;
}
/**
* get song list
* @return
*/
public ListStatement getLrcList(){
return statements;
}
}
今天在做内网邮箱发送功能时报如下错误:
554 Relay rejected for policy reasons.
测试时给内容邮箱发送正常,给126发送就报如上错误,后来查看是权限限制的问题。
在网上查找到邮件发送时的常见问题总结,备注一下。
介绍邮件系统常见的错误代码及解释,还有客户端报错相关信息
按照下列“Q”代表问题,“A”代表解答。
Q:the server says:550 relaying mail to is not allowed
Q:The server says:550 ... relaying denied
Q:the server says:550 5.7.1 relaying not permitted:
A:使用某些Smtp服务器时,限制了收件人的地址,只能换一个Smtp服务器。
Q:The server says:550 :local user only
Q:The server says:550 :Invalid User
Q:The server says:550 Invalid recipient
A:使用163.NET,163.com,yeah.Net和netease.com之类的Smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的“帐户属性”中的“个人信息”里面填写正确的邮件地址。
Q:the server says:551 delivery not allowed to non-local recipient
Q:The server says:553 Relay restriction.
Q:The server says:553 From , message blocked.
Q:The server says:553 sorry,you are not allow to use this SMTP to relay your eami
Q:The server says:553 sorry, that domain isn't in my list of allowed rcpthosts
A:使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的“帐户属性”中的“个人信息”里面填写正确的邮件地址。
Q:The server says:505 client was not authenticated
Q:The server says:553 authentication is required to send mail as
A:使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在“个人信息”中填写正确邮箱地址,又要选中“SMTP服务器需要认证”。
Q:The server says:535 Error:authenticatin failed
Q:The server says:535 Authentication unsuccessful
Q:The server says:452 Insufficient system storage
A:在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
Q:The server says:553 ...domain name required
Q:The server says:550 Unable to relay for ...
A:多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中“POP3 邮箱帐号”要使用“用户名#POP3地址”的格式,但在“帐户属性”中的“个人信息”中还是要填写一般的格式。
Q:The server says:553 mailbox name not allowed
A:收件人邮箱地址不允许,需检查收件人地址是否正确。
Q:the server says:553 sorry, your envelop sender is in my badmailfrom list
A:服务器限制了收件人的地址,只能换一个smtp服务器发信。
Q:the server says:554 Transaction failed
Q:The server says:451 Requested action aborted,errno=28
A:传输失败,检查网络问题。
Q:the server says:503 error:needmail command
Q:The server says:503 need mail before RCPT.
Q:The server says:503 Bad sequence of commands
A:消息命令顺序出错,一般出现在其他错误之后,先检查之前出现的错误提示。
Q:The Server says:501 syntax.helo hostname
Q:The server says:501 Invalid domain name
Q:The server says:502 unimplemented command
Q:the server says:503 5.0.0 polite people say HELO first
Q:The server says:533 relay restriction
Q:The server says:544 :Recipient address rejected: Relay access denied
A:传输中的语法错误,原因不明。
连接服务器错误,请检查您的网络设置。如果安装防火墙/杀毒软件,请检查防火墙/杀毒软件是否允许DreamMail程序访问 Internet。
账号“xxx”发送邮件错误,错误代码:554;错误信息:554 Relay rejected for policy reasons.(检查邮件系统是否有发送外网邮箱的权限)
附相关资料
SMTP 有一组固定的响应代码,表示邮件服务器对于传送邮件要求的响应状况。其中 421、450、451、452、550、551、552、553、554 等 9 组代码表示您要求邮件服务器执行的动作不成功。
354
Start Mail input
开始传输邮件正文
421
domain Service not available, closing transmission channel
括号内的主机无法提供正常服务,关闭传送管道,邮件将滞留在主机上
440
邮件址错误
445
Server Rejected
被封锁
450
Client host rejected, Cannot resolve PTR
Temporary Process Error
Resource temporarily unaviable,please try again later
Requested mail action not taken: mailbox unavailable
无法 IP 反查
Requested mail action not taken: mailbox unavailable
所要求的邮件动作无法执行:邮件信箱无法提供服务,邮件将滞留在主机上
451
Domain of sender address sender@mail.com.tw does not resolve
qq trouble creating files in queue (#4.3.0)
queuename: Cannot create "qfCAA21081" in "/var/spool/mqueue" (euid=0): No space left on device
Requested action aborted, errno=28.
无法解析寄件者邮件地址
Requested action aborted: local error in processing
要求动作中断:本地端错误
Requested action aborted,errno=28
传送失败,检查网络问题。
452
Message for would exceed mailbox quota
Requested action not taken: insufficient system storage
要求动作无法执行:系统空间不足
Insufficient system storage
在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
454
Client was not authenticated
安全因素,被封锁
472
sender@mail.com.tw no DNS A-data returned
无法 IP 反查
501
Domain of sender address sender@mail.com.tw does not exist
无法 IP 反查
Mailbox not found
5.1.1 ... User unknown
无此使用者
Syntax error,parameters in command "RCPT TO:min@laohuyatse.com.tw"unrecognized or missing
no local part
Syntax error in recipient:
"@" or "." expected after "CC"
"@" or "." expected after "fau" :
email格式l错误
503
Either sender or receiver must be local account.
安全因素,权限不足
CAT@MAIL.FORTEK.COM.TW
无此使用者,不是本主机转送信件的使用者
error:needmail command
need mail before RCPT
Bad sequence of commands
消息命令顺序出错,一般出现在其他错误之后,先检查之前出现的错误提示。
5.0.0 polite people say HELO first
传输中的语法错误,原因不明
505
client was not authenticated
使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在"个人信息"中填写正确邮箱地址,又要选中"SMTP服务器需要认证"。
521
This system is configured to reject mail from 211.20.70.148
安全因素,被封锁
535
Error:authenticatin failed
Authentication unsuccessful
在使用Esmtp认证的过程中出错,检查一下Esmtp设置,多试几次。
550
unknown user
User unknown
Invalid User
Recipient unknown
Mailbox disabled for this recipient
Unknown local part
Invalid recipient
Unable to relay for no such user
Recipient unknown
This account is not allowed
recipient unknown
No such mail drop defined,user disabled
I don't know
Relaying is prohibited
Relaying denied
relaying mail to is not allowed
... relaying denied
5.7.1 relaying not permitted:
REJECT SMTP Protocol Returned a Permanent Error 550 Forwarding percent hack is not permitted
Requested action not taken: mailbox unavailable
无此使用者,所要求动作无法执行:信箱不存在,邮件将退回给寄件者,或者限制了收件人的地址,只能换一个Smtp服务器。
System is busy
邮件系统错误
Subj similar too many!!
太多同主题信件
Relaying denied. IP name lookup failed
IP name lookup failed
DNS FAILURE
cannot route to sender address
无法 IP 反查
Relaying denied
Mailbox unavailable: This site may not be used as a relay agent.
无法转寄
:local user only
:Invalid User
Invalid recipient
使用163.net,163.com,yeah.net和netease.com之类的Smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
Unable to relay for ...
多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中"POP3 邮箱帐号"要使用"用户名#POP3地址"的格式,但在"帐户属性"中的"个人信息"中还是要填写一般的格式。
551
we do not relay ...
delivery not allowed to non-local recipient
无法转寄,使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
User not local; please try forward-path
邮件服务器知道使用者不属于本地端,将尝试括号内的转送路径
552
Requested mail action aborted: exceeded storage allocation
所要求的动作中断:超出所分配的储存空间,邮件将退回给寄件者
Sorry, we don't allow mail from your host.
被封锁
553
sorry, that domain isn't in my list of allowed rcpthosts
mailbox name not allowed
邮件地址错误
Requested action not taken: mailbox name not allowed
sorry, your envelop sender is in my badmailfrom list
所要求的动作未执行:信箱不允许该动作执行 ,或者服务器限制了收件人的地址,只能换一个smtp服务器发信。
Relay restriction.
From , message blocked.
sorry,you are not allow to use this SMTP to relay your eami
sorry, that domain isn't in my list of allowed rcpthosts
使用21cn.com,china.com,371.net,sina.com等大多数信箱的smtp服务器时,只能用自身的信箱发信,所以要在Outlook Express的"帐户属性"中的"个人信息"里面填写正确的邮件地址。
authentication is required to send mail as
使用263.net和sohu.com的Smtp服务器时,不但要用自身的邮箱发信,而且要加入身份验证,所以即要在"个人信息"中填写正确邮箱地址,又要选中"SMTP服务器需要认证"。
...domain name required
多出现在用Wingate代理服务器发送邮件时。虽然在Wingate中"POP3 邮箱帐号"要使用"用户名#POP3地址"的格式,但在"帐户属性"中的"个人信息"中还是要填写一般的格式。
554
delivery error: dd This user doesn't have a yahoo.com account
delivery error: dd Sorry, your message to xxxxyahoo.com cannot be delivered. This account is over quota.
无此使用者
Transaction failed
传送失败,检查网络问题。
571
we don't accept junk mail (mail.sysnet.net.tw)
无效的寄件者
尽量使用完整的英文描述符,采用适用于相关领域的术语,采用大小写混合使名字可读。
JAVA代码规范:
(1)类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java1.1和Java1.2的区别之一)。
(2)为了常规用途而创建一个类时,请采取"经典形式",并包含对下述元素的定义:equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3)对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。
(4)应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。
(5)设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。
(6)使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:
一个复杂的开关语句:考虑采用"多形"机制
数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
许多成员变量在特征上有很大的差别:考虑使用几个类
(7)让一切东西都尽可能地"私有"-private。可使库的某一部分"公共化"(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素-只有private字段才能在非同步使用的情况下受到保护。
(8)谨惕"巨大对象综合症。对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原理,对象表达的应该是应用程序的概念。
public class TestStar {
public static void main(String[] args) {
String star = "*";
for (int i = 0; i 5; i++) {
if (i == 0) {
System.out.print(" " + star);
System.out.println();
}
if (i == 1) {
for (int z = 0; z 4; z++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 2) {
System.out.print(" ");
for (int x = 0; x 3; x++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 3) {
for (int y = 0; y 2; y++) {
System.out.print(" " + star + " ");
}
}
}
}
}
是好使的 但是我没找到画五角星有什么规律(五角星好象不是正规图形吧?)如果还有什么要求的话 补充问题(如果是用*填充所有的东西 不包括 “ ”的话 我可以重新再给你写一个)
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流