小编jac*_*646的帖子

检查字符串是否与模式匹配

如果我需要一个字符串来匹配这个模式:"word1,word2,word3",我将如何检查字符串以确保它符合PHP格式?

我想确保字符串符合以下任何模式:

word
word1,word2
word1,word2,word3,
word1,word2,word3,word4,etc.
Run Code Online (Sandbox Code Playgroud)

php regex string

10
推荐指数
2
解决办法
3万
查看次数

我应该尝试在Java中创建可逆枚举还是有更好的方法?

我似乎多次遇到这个问题,我想问社区我是不是只是在咆哮错误的树.基本上我的问题可以归结为:如果我有一个值很重要的枚举(在Java中),我应该使用枚举还是有更好的方法,如果我使用枚举那么什么是反向查找的最佳方法吗?

这是一个例子.假设我想创建一个代表特定月份和年份的bean.我可能会创建如下内容:

public interface MonthAndYear {
    Month getMonth();
    void setMonth(Month month);
    int getYear();
    void setYear(int year);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将我的月份存储为一个名为Month的单独类,因此它是类型安全的.如果我只是输入int,那么任何人都可以传入13或5,643或-100作为数字,并且在编译时无法检查它.我限制他们把一个月我将实现为枚举:

public enum Month {
    JANUARY,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE,
    JULY,
    AUGUST,
    SEPTEMBER,
    OCTOBER,
    NOVEMBER,
    DECEMBER;
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有一些我想写的后端数据库,它只接受整数形式.那么标准的方法似乎是:

public enum Month {
    JANUARY(1),
    FEBRUARY(2),
    MARCH(3),
    APRIL(4),
    MAY(5),
    JUNE(6),
    JULY(7),
    AUGUST(8),
    SEPTEMBER(9),
    OCTOBER(10),
    NOVEMBER(11),
    DECEMBER(12);

    private int monthNum;
    public Month(int monthNum) {
        this.monthNum = monthNum;
    }

    public getMonthNum() {
        return monthNum;
    }
}
Run Code Online (Sandbox Code Playgroud)

相当简单,但如果我想从数据库中读取这些值并编写它们会发生什么?我可以使用枚举中的case语句实现一个静态函数,它接受一个int并返回相应的Month对象.但这意味着如果我改变了什么,那么我将不得不改变这个函数以及构造函数参数 - 在两个地方改变.所以这就是我一直在做的事情.首先,我创建了一个可逆的地图类,如下所示:

public class ReversibleHashMap<K,V> extends java.util.HashMap<K,V> {
    private …
Run Code Online (Sandbox Code Playgroud)

java enums idiomatic

9
推荐指数
1
解决办法
1469
查看次数

java文件名过滤模式

我需要实施

File[] files = getFiles( String folderName, String ptrn );
Run Code Online (Sandbox Code Playgroud)

其中ptrn是一个命令提示符样式模式,如"*2010*.txt"

我熟悉FilenameFilter类,但无法实现, public boolean accept(File dir, String filename) 因为String.matches()不接受这样的模式.

谢谢!

java regex filenames filter

9
推荐指数
1
解决办法
4万
查看次数

没有食谱的makefile模式规则

我正在观察一个有趣的make行为,我想知道除了gmake中的一个bug之外是否还有合理的解释.

假设我们在makefile中有以下内容:

%-animal:
        echo "$* is an animal"

%-fox: %-fox-animal

%-wolf: %-wolf-animal
Run Code Online (Sandbox Code Playgroud)

最后两个目标之间的差异是"%-wolf"没有任何配方,"%-fox"有一个空配方(即只有一行开头有一个标签).

当我们尝试执行规则时,会发生以下情况:

[root@cv19 tmp]# make freddy-animal
echo "freddy is an animal"
freddy is an animal
[root@cv19 tmp]# make freddy-wolf
make: *** No rule to make target `freddy-wolf'.  Stop.
[root@cv19 tmp]# make freddy-fox
echo "freddy-fox is an animal"
freddy-fox is an animal
Run Code Online (Sandbox Code Playgroud)

iethe模式规则有一个配方(虽然是空的)工作,那个没有.我错过了它应该工作的方式吗?

makefile rules

9
推荐指数
1
解决办法
2264
查看次数

适配器模式与Liskov替换

适配器设计模式用于将类(Target)的接口转换为客户期望的另一个接口(Adaptee).适配器允许不兼容的类一起工作,否则由于它们的不兼容接口而无法工作.

适配器模式可以通过两种方式实现:继承(适配器模式的类版本)和组合(适配器模式的对象版本).

我的问题是关于使用继承实现的适配器模式的类版本.

以下是绘图编辑器的示例:

图1:

interface Shape   
{   
        Rectangle BoundingBox();   

        Manipulator CreateManipulator();   
}   

class TextView   
{   
        public TextView() { }   

        public Point GetOrigin() { }   

        public int GetWidth() { }   

        public int GetHeight() { }   
}  
interface Shape
{
        Rectangle BoundingBox();

        Manipulator CreateManipulator();
}

class TextView
{
        public TextView() { }

        public Point GetOrigin() { }

        public int GetWidth() { }

        public int GetHeight() { }
}
Run Code Online (Sandbox Code Playgroud)

我们想重用TextView类来实现TextShape,但是接口是不同的,因此,TextView和Shape对象不能互换使用.

是否应该更改TextView类以符合形状界面?也许不是.

TextShape可以通过以下两种方式之一使TextView接口适应形状的界面:

  1. 通过继承Shape的接口和TextView的实现(适配器模式的类版本)
  2. 通过在TextShape对象中编写TextView实例并使用TextView实例(适配器模式的对象版本)实现TextShape的接口.

类适配器

图2:

interface Shape   
{   
    Rectangle BoundingBox();   

    Manipulator …
Run Code Online (Sandbox Code Playgroud)

design-patterns liskov-substitution-principle adapter solid-principles

9
推荐指数
1
解决办法
2153
查看次数

编写做一件事并做得好的程序

我可以通过封装,依赖注入,最少知识原则,你不需要它来掌握"做一件事"的部分; 但我怎么理解第二部分"做得好"?

给出的一个例子是完整性的概念,在同一篇YAGNI文章中给出:

例如,在允许添加项目,删除项目或修改项目的特征中,可以使用完整性来推荐"重命名项目".

但是,我发现这样的推理很容易被滥用到特征蠕变中,从而违反了"做一件事"的部分.

因此,看到相当一个特征属于"做得好"类别(因此,将其包含在函数/类/程序中)或其他"做一件事"类别(因此,排除它)的试金石是什么? ?

第一部分,"做一件事",最好通过UNIX的ls命令来理解,因为它包含了过多的标志来格式化它的输出,这些标志本应完全委托给另一个外部程序.但我没有一个很好的例子来看第二部分"做得好".

什么是一个很好的例子,删除任何进一步的功能将使它不"做得好"?

single-responsibility-principle yagni solid-principles

9
推荐指数
1
解决办法
739
查看次数

设计问题:预约系统

我必须为酒店设计和实施预订系统.我有

  • Reservation对象的数组列表
  • 房间对象的数组列表

我想在指定日期"保留"房间.

预订一个没有约会的房间会很容易,但它的日期部分会让它变得复杂.我正在努力设计这个并且自信地朝着正确的方向轻推我可以编码它.

How do you say一个房间在这个日期被预订但在该日期没有?

没有数据库或任何东西它只是一个抽象的预订系统.

(我一直盯着这一段时间,请原谅我,如果解决方案很容易)

谢谢.

java

9
推荐指数
2
解决办法
1万
查看次数

一棵树,每个节点可以有多个父节点

这是一个理论/迂腐的问题:想象一下属性,其中每个属性可以由多个其他人拥有.此外,从所有权的一次迭代到下一次,两个邻近的所有者可以决定部分地结合所有权.例如:

territory 1, t=0: a,b,c,d
territory 2, t=0: e,f,g,h

territory 1, t=1: a,b,g,h
territory 2, t=1: g,h
Run Code Online (Sandbox Code Playgroud)

也就是说,cd不再拥有自己的财产; 可以这么说g,h成了肥猫.

我目前将这个数据结构表示为一个树,每个孩子可以有多个父母.我的目标是将其融入复合设计模式中; 但我遇到的问题是如何在客户可能会回过头来更新以前的所有权而不会破坏整个结构.

我的问题是双重的.

  1. 简单:这个数据结构有什么方便的名称,这样我可以自己谷歌吗?

  2. 辛苦:我做错了什么?当我编码时,我试着保持口头禅,"保持简单,愚蠢",在我脑海里,我觉得我打破了这个信条.

oop tree design-patterns graph-theory composite

9
推荐指数
1
解决办法
1万
查看次数

Spring测试环境最佳实践

我试图用集成测试覆盖一个巨大的Spring Boot应用程序.应用程序中有很多Spring bean.加载Spring上下文需要一段时间.

所以我想知道 -

  • Spring是否足够聪明,可以在位于不同类中的多个集成测试之间共享相同的上下文?我的意思是避免初始化每个测试类的重量级上下文.
  • 当测试1,2,4使用TestContextOne和测试3,5使用时会发生什么TestContextTwo?Spring会以1,2,4,3,5的顺序启动它们吗?或者Spring在内存中保留两个上下文?

PS换句话说,通常的做法是为所有集成测试使用单个"完整"Spring Context,而不是为每个测试编写单独的Spring?

java spring design-patterns spring-test spring-boot

9
推荐指数
1
解决办法
6397
查看次数

Pandas - 查找与行序列模式匹配的行并将其编入索引

我想在分类变量的数据框中找到一个向下行的模式.我可以看到如何使用Series.shift()来查找/关闭并使用布尔逻辑来查找模式,但是,我想用分组变量执行此操作,并且还标记作为模式一部分的所有行,而不仅仅是起始行.

码:

import pandas as pd
from numpy.random import choice, randn
import string

# df constructor
n_rows = 1000
df = pd.DataFrame({'date_time': pd.date_range('2/9/2018', periods=n_rows, freq='H'),
                   'group_var': choice(list(string.ascii_uppercase), n_rows),
                   'row_pat': choice([0, 1, 2, 3], n_rows),
                   'values': randn(n_rows)})

# sorting 
df.sort_values(by=['group_var', 'date_time'], inplace=True)
df.head(10)
Run Code Online (Sandbox Code Playgroud)

哪个返回: 在此输入图像描述

我可以通过这个找到模式的开头(虽然没有分组):

# the row ordinal pattern to detect
p0, p1, p2, p3 = 1, 2, 2, 0 

# flag the row at the start of the pattern
df['pat_flag'] = \
df['row_pat'].eq(p0) & \
df['row_pat'].shift(-1).eq(p1) & \
df['row_pat'].shift(-2).eq(p2) …
Run Code Online (Sandbox Code Playgroud)

indexing row pandas

9
推荐指数
1
解决办法
1733
查看次数