Tag: string

实现一个函数来检查字符串/字节数组是否遵循utf-8格式

我正在努力解决这个面试问题。 在明确定义了UTF-8格式之后。 例如:1字节:0b0xxxxxxx 2字节:….要求编写一个函数来validation输入是否有效UTF-8。 输入将是字符串/字节数组,输出应为是/否。 我有两种可能的方法。 首先,如果输入是一个字符串,因为UTF-8最多是4个字节,在我们删除前两个字符“0b”之后,我们可以使用Integer.parseInt(s)来检查字符串的其余部分是否在范围0到10FFFF。 此外,最好检查字符串的长度是否为8的倍数,以及输入字符串是否首先包含全0和1。 所以我将不得不经历两次字符串,复杂性将是O(n)。 其次,如果输入是字节数组(如果输入是字符串,我们也可以使用此方法),我们检查每个1字节元素是否在正确的范围内。 如果输入是一个字符串,首先检查字符串的长度是否为8的倍数,然后检查每个8字符的子字符串是否在该范围内。 我知道有很多关于如何使用Java库检查字符串的解决方案,但我的问题是我应该如何根据问题实现该function。 非常感谢。

当参数字符串为null时,int compareTo()应该返回什么?

据说当input参数为null时,compareTo()应抛出NullPointerException。 但是,我正在实现一个需要将字段与String类型进行比较的类。 这些字段不必是强制性的。 我想知道在这种情况下, 1)当输入为空时我应该返回什么? 是否任何非空字符串按字典顺序大于或小于null? 和 2)如果这被认为是不好的做法,是否有任何支持性论点? 我应该强制用户使用空字符串吗? 如果使用空字符串,那不会混淆字段不适用的情况和字段为空的情况吗? 如果必须抛出exception,那么除了在手册中警告用户之外,还有什么可以/我应该做什么? 编辑:我可能不会在这里清楚地表达自己,但在我正在实现的程序中,可以为null的字符串是所有字段或类,不应该为null。 换句话说,comparisonTo()使用的对象不能为null,只有它们的私有字段可以。 所以在这种情况下,我相信如果我正确地实现了compareTo(),它就不会违反传递要求,因为具有空字段的类总是被认为是相同的。 我是对的还是我在解释这个错误? 谢谢大家的答案!

如何在Java中将xml元素及其子节点转换为String?

您好我想将XML节点及其子节点转换为具有节点名称的字符串。 例如,我从XML文档中获取一个节点,如下所示: *86 *86 *80 0 我想将整个节点转换为字符串。 使用nodenames,不仅是文本。 非常感谢在这方面的任何帮助。 谢谢。

String Compare与实际返回值

在oracles 网站上的Java API中:“compareTo返回:”如果参数字符串等于此字符串,则值为0; 如果此字符串按字典顺序小于字符串参数,则小于0; 如果此字符串在字典上大于字符串参数,则值大于0。“” 这是一个if语句: String a = “abd”; String b = “abc”; if(a.compareTo(b) >= 1) 返回true,因为字符串a更大,按字典顺序排列。 我的问题是,compareTo总是返回0,1或-1吗? 或者它是否返回字符串大于或小于字符串参数的实际数量 。 所以在上面的if语句中,由于“abd”大于“abc”,它是否返回1?

java中2个字符串的.equals的时间复杂度是多少?

我想知道Java中.equals运算符的时间复杂度(大O)是两个字符串。 基本上,如果我做了stringOne.equals(stringTwo),它的表现如何? 谢谢。

需要在java中将字符串拆分为两部分

我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块。 我需要将它们分成两部分(一个整数部分和一个字符串)。 我尝试使用String.split(“\\D”, 1) ,但它吃掉了第一个字符。 我检查了所有的String API,但没有找到合适的方法。 做这件事有什么方法吗?

在Java中查找字符串中出现的所有子字符串

我试图在Java中查找字符串中所有出现的子字符串。 例如:搜索“ababsdfasdfhelloasdf”为“asdf”将返回[8,17],因为有2个“asdf”,一个位于8位,一个位于17位。搜索“aaaaaa”中的“aa”将返回[0,1, 1,2,3,4]因为在位置0,1,2,3和4处有一个“aa”。 我试过这个: public List findSubstrings(String inwords, String inword) { String copyOfWords = inwords; List indicesOfWord = new ArrayList(); int currentStartIndex = niwords.indexOf(inword); int indexat = 0; System.out.println(currentStartIndex); while (cthing1 > 0) { indicesOfWord.add(currentStartIndex+indexat); System.out.println(currentStartIndex); System.out.println(indicesOfWord); indexat += cthing1; copyOfWords = copyOfWords.substring(cthing1); System.out.println(copyOfWords); cthing1 = copyOfWords.indexOf(inword); } 这个问题可以在Python中解决如下: indices = [m.start() for m in […]

在Switch Case Java中编译时间常量用法

case使用规则说: case表达式必须求值为Compile Time Constant 。 case(t)表达式必须与switch(t)的表达式相同,其中t是类型(String)。 如果我运行此代码: public static void main(String[] args) { final String s=new String(“abc”); switch(s) { case (s):System.out.println(“hi”); } } 它给出了编译错误: “case expression must be a constant expression”另一方面,如果我尝试使用final String s=”abc”; ,它工作正常。 据我所知, String s=new String(“abc”)是对位于堆上的String对象的引用。 而s本身就是一个编译时常量。 这是否意味着final String s=new String(“abc”); 是不是编译时间常数?

在Java中用’\\’替换单个’\’

如何用’\\’替换单个’\’ ‘\\’ ? 当我运行replaceAll()然后我收到此错误消息。 Exception in thread “main” java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^ at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.compile(Pattern.java:1466) at java.util.regex.Pattern.(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at java.lang.String.replaceAll(String.java:2190) at NewClass.main(NewClass.java:13) Java Result: 1 我的代码: public class NewClass { public static void main(String[] args) { String str = “C:\\Documents and Settings\\HUSAIN\\My Documents\\My Palettes”; str = str.replaceAll(“\\”, “\\\\”); […]

映射postgresql text 类型和Java类型

我有一个postgresql表包含text [] []类型的字段。 在JDBC代码中,我使用了一个String数组,但是一个例外告诉我,类型之间没有匹配。 如果类型之间没有映射,你能否建议我使用字符串数组的pgsql类型? 这是代码: String list = “‘{“; for(int i=0; i<array.length; i++) { list+=prodotti[i]+","; } list+="}'"; preparedStm.setString(4, list);