Archive for 数据结构算法

java中获取当前类所在的目录

在学习工作中遇到路径问题,就总结了一下,以供学习,若有什么问题还请各位多多指教。。。

得到类classes的目录:

String classDir = this.getClass().getResource(“/”).getPath()

如果要得到工程根目录:

String rootDir = this.getClass().getResource(“/”).getPath() +”../../”;

得到绝对路径:

request.getSession().getServletContext().getRealPath(“/”);

前提:

在java程序设计中有时候会要访问类所在 文件夹去取 些文件 比如要想改变窗口标题栏 左上角 图标图像 我们可以把1.gif 放在类所在文件夹 然后在程序中取这个gif 文件就可以了

2、实施:

如果对于类不在包内:利用 System.out.getProperty(“user.dir”)和this.getClass() .getResource(“”)获取 路径是 样 但是对于类在包内的情况就区别了: System.out.getProperty(“user.dir”)取得的是包所在 路径 而this.getClass().getResource(“”)才真正获得 是当前类所在 路径

3、代码实现:

我建立了 个包yyyb 其下有 个YyybDemo. 类

System.out.println(System.getProperty(“user.dir”));
System.out.println(this.getClass .getResource(“”).getPath());
this. IconImage(new ImageIcon(this.getClass().getResource(“1.gif”)).getImage());

4、例子结果:

上面 两个输出分别为:

D:\liyuanxun\java\develop\develop
/D:/liyuanxun/java/develop/develop/yyyb/

JAVA中MAP的用法

MAP是个比较常用的数据结构哦~~

Map简介

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。

  Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

  注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。

  所有通用的映射实现类应该提供两个“标准的”构造方法:一个 void (无参数)构造方法,用于创建空映射;一个是带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。

  此接口中包含的“破坏”方法可修改其操作的映射,如果此映射不支持该操作,这些方法将抛出 UnsupportedOperationException。如果是这样,那么在调用对映射无效时,这些方法可以(但不要求)抛出 UnsupportedOperationException。例如,如果某个不可修改的映射(其映射关系是“重叠”的)为空,则对该映射调用 putAll(Map) 方法时,可以(但不要求)抛出异常。

  某些映射实现对可能包含的键和值有所限制。例如,某些实现禁止 null 键和值,另一些则对其键的类型有限制。尝试插入不合格的键或值将抛出一个未经检查的异常,通常是 NullPointerException 或 ClassCastException。试图查询是否存在不合格的键或值可能抛出异常,或者返回 false;某些实现将表现出前一种行为,而另一些则表现后一种。一般来说,试图对不合格的键或值执行操作且该操作的完成不会导致不合格的元素被插入映射中时,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。

  此接口是 Java Collections Framework 的成员。

  Collections Framework 接口中的很多方法是根据 equals 方法定义的。例如,containsKey(Object key) 方法的规范中写道:“当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true”。不 应将此规范解释为:调用具有非空参数 key 的 Map.containsKey 将导致对任意的键 k 调用 key.equals(k)。实现可随意进行优化,以避免调用 equals,例如,可首先比较两个键的哈希码(Object.hashCode() 规范保证哈希码不相等的两个对象不会相等)。一般来说,只要实现者认为合适,各种 Collections Framework 接口的实现可随意利用底层 Object 方法的指定行为。

  常用操作说明

  void clear()

  从此映射中移除所有映射关系(可选操作)。

  boolean containsKey(Object key)

  如果此映射包含指定键的映射关系,则返回 true。

  boolean containsValue(Object value)

  如果此映射将一个或多个键映射到指定值,则返回 true。

  Set
> entrySet()

  返回此映射中包含的映射关系的 Set 视图。

  boolean equals(Object o)

  比较指定的对象与此映射是否相等。

  V get(Object key)

  返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

  int hashCode()

  返回此映射的哈希码值。

  boolean isEmpty()

  如果此映射未包含键-值映射关系,则返回 true。

  Set keySet()

  返回此映射中包含的键的 Set 视图。

  V put(K key, V value)

  将指定的值与此映射中的指定键关联(可选操作)。

  void putAll(Map m)

  从指定映射中将所有映射关系复制到此映射中(可选操作)。

  V remove(Object key)

  如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

  int size()

  返回此映射中的键-值映射关系数。

  Collection values()

  返回此映射中包含的值的 Collection 视图。

Map的一般用法

1.声明一个Map :

Map map = new HashMap();

2 .向map中放值 ,注意: map是key-value的形式存放的,如:

map.put(“sa”,”dd”);

3 .从map中取值 :

String str = map.get(“sa”).toString,

结果是: str = “dd’

4 .遍历一个map,从中取得key和value :

Map m= new HashMap();

for(Object obj : map.keySet()){

Object value = map.get(obj );

}

自己做的文章关键字链接添加工具。

上次学长叫我做个关键字链接的工具。他写软文的时候要用。于是我就吭哧吭哧干到3点。好了。。当然是CLI版的。UI有机会以后再说。用java做的。学长早上使用了下说能不能只有第一个匹配的添加?
哦行~java的api刚好有这个函数Matcher.replaceFirst(); 不用自己写算法了~
整个代码没有经过设计。半夜直接码的。。只有一点OO思想。把关键字链接包装成一个对象了~实践证明这样设计确实增加了代码的usability,testability,Modifibility。
哈 ~总之UED方面还有很多要改进的地方.总之很搓哈,献丑~写这个完全是锻炼下手感,不然javase方面很久没接触了。
用到了string pattern match FileReader 什么的。
然后不多说了附上我之前写的使用文档:
撰写keylink.txt
这个txt里面是一些关键字 和你所想要添加的链接

每行一对
关键字和链接之间有一个空格

撰写wenzhang.txt
就是你要添加关键字链接的文章,

keylink.txt 和 wenzhang.txt 要放在同一个文件夹下 。注意名字不能变 软件就是根据名字来识别的。

总体文件结构:

如果keylink.txt 和 wenzhang.txt这两个文件在“D:\2-seo\test” 文件下

那么
输入的时候就输入“D:\\2-seo\\test\\”
注意要打两个反斜杠!! 最后再加两个反斜杠~!!

最后生成的文章在 out.txt中!!


如果不能运行请先下载JRE1.6 进行安装。

//源代码遵循GPL协议~
package html;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//把关键字和 链接都加在 keylink.txt文件中
//把文章加在wenzhang.txt

public class Html {

   public static final String keylinkFile = "keylink.txt";
   public static final String contentFile = "wenzhang.txt";

	// @param args

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	    String 	cp = "";
		System.out.println("请输入keylink.txt以及wenzhang.txt文件所在的目录:");
		Scanner   sc=new   Scanner(System.in);
		cp=sc.next();
		String path = cp+keylinkFile;

		FileReader fr = null;
		try {
			fr = new FileReader(path);
		} catch (FileNotFoundException e) {

			e.printStackTrace();
		}
		   BufferedReader br = new BufferedReader(fr);

		   List List_KeyLinkPair = new ArrayList();

		   String temp = "";// 用于临时保存每次读取的内容
		   //处理好 keylink.txt文件了
		   try {
			while ((temp = br.readLine()) != null) {

						KeyLinkPair tempKLP = new KeyLinkPair();
						tempKLP.setKeyLinkpair(temp);
						tempKLP.mamimamihong();
						List_KeyLinkPair.add(tempKLP);
			   }
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		//然后就是匹配。
		 String path1 = cp+contentFile;
		 FileReader fr1 = null;
			try {
				fr1 = new FileReader(path1);
			} catch (FileNotFoundException e) {

				e.printStackTrace();
			}
			   BufferedReader br1 = new BufferedReader(fr1);

			   String allContent = "";// 用于临时保存每次读取的内容
			   String line = "";
			   //处理好 keylink.txt文件了
			try {
				while ((line= br1.readLine()) != null) {
					    allContent += line;
					    allContent +="\n";

				   }
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			 System.out.println(allContent);
			   //得到文件的内容之后 进行替换
			   Iterator  iter = List_KeyLinkPair.iterator();
			   Pattern pattern ;
			   Matcher matcher;
			   String each = "";
			  // String outputContent = "";
			   while(iter.hasNext()) {
				   KeyLinkPair kkk =iter.next();

				   pattern  = Pattern.compile(kkk.getKeyWord());
				   matcher = pattern.matcher(allContent);
				   //allContent = matcher.replaceAll(kkk.getHtmlLink());
				   allContent = matcher.replaceFirst(kkk.getHtmlLink());
			   }

			    BufferedWriter buff = null;
			    String outPath = cp+ "\\" + "out.txt";
				try {
					buff = new BufferedWriter(new FileWriter(outPath));
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			     try {
					buff.write(allContent);
					  buff.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		   System.out.println(allContent);
	}
}

//自定义的一个键值对
class KeyLinkPair
{
  /**
	 * @return the keyWord
	 */
	public String getKeyWord() {
		return keyWord;
	}
	/**
	 * @param keyWord the keyWord to set
	 */
	public void setKeyWord(String keyWord) {
		this.keyWord = keyWord;
	}
	/**
	 * @return the link
	 */
	public String getHtmlLink() {
		return htmlLink;
	}
	/**
	 * @param link the link to set
	 */
	public void setHtmlLink(String htmlLink) {
		this.htmlLink = htmlLink;
	}
	  /**
	 * @return the keyLinkpair
	 */
	public String getKeyLinkpair() {
		return KeyLinkpair;
	}
	/**
	 * @param keyLinkpair the keyLinkpair to set
	 */
	public void setKeyLinkpair(String keyLinkpair) {
		KeyLinkpair = keyLinkpair;
	}
	/**
	 * @return the ubbLink
	 */
	public String getUbbLink() {
		return ubbLink;
	}
	/**
	 * @param ubbLink the ubbLink to set
	 */
	public void setUbbLink(String ubbLink) {
		this.ubbLink = ubbLink;
	}
	 /**
	 * @return the url
	 */
	public String getUrl() {
		return url;
	}
	/**
	 * @param url the url to set
	 */
	public void setUrl(String url) {
		this.url = url;
	}

	//mamimamihong函数 使单个关键字 链接 对应起来~就是加上标签啦 。
	public void mamimamihong() {
		 String [] kl= KeyLinkpair.split(" ");
		 keyWord = kl[0];
		 url = kl[1];
		 htmlLink = ""+keyWord+"";
		 ubbLink  ="[url="+url+"]"+keyWord+"[/url]";
	}

	  String keyWord;
	  String url ;
          String htmlLink;
	  String ubbLink;
	  String KeyLinkpair;
}

无觅相关文章插件,快速提升流量