Java编程,大神求帮忙,马上交作业了,现场等

如题所述

第1个回答  推荐于2016-03-29
代码如下,关键地方的注释我都有加,有问题可以继续追问

import java.io.UnsupportedEncodingException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
Demo demo = new Demo();
while (true)
{
System.out.println("请输入一个email地址:");
//1.使用Scanner接收接盘输入
String inputEmail = scanner.next();
//2.判断输入字符串是否符合email格式
if (demo.isInvalidEmailAddress(inputEmail))
{
try
{
//3.加密编码email地址
String encodeEmail = demo.encode(inputEmail);
System.out.println("加密后密文:" + encodeEmail);
//4.解密加密后的字符串
String decodeEmail = demo.decode(encodeEmail);
System.out.println("密文解密结果:" + decodeEmail);
}
catch (UnsupportedEncodingException e)
{
System.out.println("发生异常");
e.printStackTrace();
}
break;
}
else
{
System.out.println("非法的email地址,请重新输入");
}
}
}

/**
* 判断所给字符串是否符合email地址格式
*
* @param email
* @return
*/
public boolean isInvalidEmailAddress(String email)
{
Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}

/**
* 加密所给字符串
*
* @param email
* @return
* @throws UnsupportedEncodingException
*/
public String encode(String email) throws UnsupportedEncodingException
{
StringBuffer buffer = new StringBuffer();
//以iso-8859-1编码获得byte[]
byte[] bytes = email.getBytes("iso-8859-1");//注意,以指定字符编码获取字符串byte[]的方法有抛出异常
for (byte b : bytes)
{
//对每个字节增加27,同时每个字节之间添加%
buffer.append(b + 27);
buffer.append("%");
}
return buffer.toString();
}

/**
* 解密加密后的字符串
*
* @param str
* @return
*/
public String decode(String str)
{
String[] strings = str.split("%");
byte[] bytes = new byte[strings.length];
for (int i = 0; i < strings.length; i++)
{
bytes[i] = (byte) (Integer.parseInt(strings[i]) - 27);//注意,此处不可以使用Byte.parseByte()
// ,因为密文中的值被增加过27,有所以这个值是有可能大于127的,当值大于127时,parseByte会抛出异常,因为byte的表示范围是-128~127,越界了
}
return new String(bytes);
}
}本回答被提问者和网友采纳
相似回答