请将以下ruby代码改成php或者java

[code="ruby"]

compl1.rb - Redis autocomplete example

download female-names.txt from http://antirez.com/misc/female-names.txt

require 'rubygems'
require 'redis'

r = Redis.new

Create the completion sorted set

if !r.exists(:compl)
puts "Loading entries in the Redis DB\n"
File.new('female-names.txt').each_line{|n|
n.strip!
(1..(n.length)).each{|l|
prefix = n[0...l]
r.zadd(:compl,0,prefix)
}
r.zadd(:compl,0,n+"*")
}
else
puts "NOT loading entries, there is already a 'compl' key\n"
end

Complete the string "mar"

def complete(r,prefix,count)
results = []
rangelen = 50 # This is not random, try to get replies < MTU size
start = r.zrank(:compl,prefix)
return [] if !start
while results.length != count
range = r.zrange(:compl,start,start+rangelen-1)
start += rangelen
break if !range or range.length == 0
range.each {|entry|
minlen = [entry.length,prefix.length].min
if entry[0...minlen] != prefix[0...minlen]
count = results.count
break
end
if entry[-1..-1] == "*" and results.length != count
results << entry[0...-1]
end
}
end
return results
end

complete(r,"marcell",50).each{|res|
puts res
}

[/code]

[code="java"][/
package nosql;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import redis.clients.jedis.Jedis;

public class RedisDemo {

private final static String COMPLETE_KEY = "compl";

private final static Jedis jedis = new Jedis("192.168.118.2");

public static void main(String[] args) throws Exception {
    if(jedis.exists(COMPLETE_KEY)) {
        System.err.println("NOT loading entries, there is already a '" + COMPLETE_KEY + "' key\n");
    } else {
        setupCompletedSet();
    }

    Set<String> set = complete("ma" , 50);
    for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
        System.out.println(iterator.next());
    }
}

private static void setupCompletedSet() throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(RedisDemo.class.getResourceAsStream("female-names.txt")));
    String line = null;
    while((line = br.readLine()) != null) {
        for(int i = 1 ; i < line.length(); i++) {
            String prefix = line.substring(0, i);
            jedis.zadd(COMPLETE_KEY, 0, prefix);
        }
        jedis.zadd(COMPLETE_KEY, 0, line + "*");
    }
    System.out.println("finish to add all values to zset");
}

private static Set<String> complete(String prefix , int count) {
    Set<String> results = new HashSet<String>();
    int rangeLength = 50; // This is not random, try to get replies < MTU size

    Long start = jedis.zrank(COMPLETE_KEY, prefix);
    if (start != null && start > 0) {
        int begin = start.intValue();
        while(results.size() != rangeLength) {
            Set<String> rs = jedis.zrange(COMPLETE_KEY,begin,begin + rangeLength-1);  
            begin += rangeLength;

            if (rs == null || rs.size() == 0) {
                break;
            }

            for (Iterator<String> iterator = rs.iterator(); iterator.hasNext();) {
                String entry = (String) iterator.next();
                int min = Math.min(entry.length(), prefix.length());
                if (!entry.substring(0, min).equals(prefix.substring(0, min))) {
                    count = rs.size();
                    break;
                }

                if (entry.substring(entry.length() - 1).equals("*") && results.size() != count) {
                    results.add(entry.substring(0, entry.length()-1));
                }

            }

        }
    }

    return results;
}

}
code]
试试,看行不行!

我测试过用我这个

[color=blue][/
package nosql;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import redis.clients.jedis.Jedis;

public class RedisDemo {

private final static String COMPLETE_KEY = "compl";

private final static Jedis jedis = new Jedis("192.168.118.2");

public static void main(String[] args) throws Exception {
if(jedis.exists(COMPLETE_KEY)) {
System.err.println("NOT loading entries, there is already a '" + COMPLETE_KEY + "' key\n");
} else {
setupCompletedSet();
}

Set set = complete("ma" , 50);
for (Iterator iterator = set.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}
}

private static void setupCompletedSet() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(RedisDemo.class.getResourceAsStream("female-names.txt")));
String line = null;
while((line = br.readLine()) != null) {
for(int i = 1 ; i < line.length(); i++) {
String prefix = line.substring(0, i);
jedis.zadd(COMPLETE_KEY, 0, prefix);
}
jedis.zadd(COMPLETE_KEY, 0, line + "*");
}
System.out.println("finish to add all values to zset");
}

private static Set complete(String prefix , int count) {
Set results = new HashSet();
int rangeLength = 50; // This is not random, try to get replies < MTU size

Long start = jedis.zrank(COMPLETE_KEY, prefix);
if (start != null && start > 0) {
int begin = start.intValue();
while(results.size() != rangeLength) {
Set rs = jedis.zrange(COMPLETE_KEY,begin,begin + rangeLength-1);

begin += rangeLength;

if (rs == null || rs.size() == 0) {
break;
}

for (Iterator iterator = rs.iterator(); iterator.hasNext();) {
String entry = (String) iterator.next();
int min = Math.min(entry.length(), prefix.length());
if (!entry.substring(0, min).equals(prefix.substring(0, min))) {
count = rs.size();
break;
}

if (entry.substring(entry.length() - 1).equals("*") && results.size() != count) {
results.add(entry.substring(0, entry.length()-1));
}

}

}
}

return results;
}
}
code][/color]

楼上没搞错吧,完全复制我的代码!

有意思,还真是一模一样啊

估计是看到分多吧,哈哈,不过我比较关心楼主翻译成java的用意啊。。。。